& Quot; strncpy_s & Quot; Не работает

Я пытаюсь использовать 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);
}

-6

Решение

Ваш код имеет несколько проблем.

Прежде всего, ваш звонок 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 ++ как общеизвестно, что онлайн-учебники отсутствуют.

1

Другие решения


По вопросам рекламы [email protected]