Я пытаюсь использовать strncpy_s для символов из одного слова в массив (я не могу использовать strncpy в Visual Studio 2013, и я совершенно новичок в strncpy_s). Я продолжаю получать эти ошибки, что бы я ни делал:
Ошибка 1 ошибка C2660: «strncpy_s»: функция не принимает 3 аргумента
Ошибка 2 IntelliSense: ни один экземпляр перегруженной функции «strncpy_s» не соответствует списку аргументов. Типы аргументов: (char *, char, int)
Цель моего кода:
Если пользователь вводит, например, «ПРИВЕТ«(то есть text = HELLO)
Тогда ->
Copy HELLO to first_array [0] Copy ELLO to first_array [1] Copy LLO to first_array [2] Copy LO to first_array [3] Copy O to first_array [4]
И вот мой код:
int _tmain(int argc, _TCHAR* argv[])
{
char text[32];
cin >> text;
char* first_array[] = {""};
int n = strlen(text);
for (int i = 0; i < n; i++)
{
strncpy_s(first_array[i], text[i], n-i);
}
}
РЕДАКТИРОВАТЬ 1. Немного изменил код, теперь программа запускается, но после ввода текста внезапно выдает ошибку «example.exe перестал работать».
int _tmain(int argc, _TCHAR* argv[])
{
char* text[32];
cin >> *text;
char* first_array[] = {""};
//int n = strlen(text);
int n = sizeof(text);
for (int i = 0; i < n; i++)
{
strncpy_s(first_array[i], n - i, text[i], 32);
}
Ваш код имеет несколько проблем.
Прежде всего, ваш звонок strncpy_s
не следует декларация о strncpy_s
, какие списки четыре параметры (если первый параметр является char *
как в вашем случае)
errno_t strncpy_s(
char *strDest,
size_t numberOfElements,
const char *strSource,
size_t count
);
Но гораздо важнее то, что вы заявляете, что хотите получить несколько строк в массиве. first_array[]
каждый из которых содержит более короткую версию входной строки, чем предыдущая. Но first_array[]
ты объявил только держит один char *
строка, тот, который вы инициализировали first_array[0]
чтобы, длиной всего один символ (завершающий нулевой байт):
char* first_array[] = {""};
Даже если вы объявили это провести 5 char *
(инициализация не нужна, так как вы копируете содержимое в любом случае) …
char * first_array[5];
…ты еще не выделил пространство памяти для каждого из пяти char *
строки. У тебя всего пять указателей указывая никуда, и должен был бы динамически распределять память, в зависимости от ввода пользователя.
Потому что я даже не говорил о том, что произойдет, если пользователь введет более пяти символов, не говоря уже о 32 …
На этом этапе, даже если я было бы опубликовать «рабочий» код, это вас мало научит. Вы, очевидно, следуете некоторому учебнику или действительно пытаетесь учиться в процессе & ошибка. Я думаю, что правильный ответ здесь будет:
Получить другой учебник. Еще лучше, получить хорошая книга на C или хорошая книга по C ++ как общеизвестно, что онлайн-учебники отсутствуют.