Не понимаю про strcpy в C ++ - PullRequest
1 голос
/ 21 апреля 2020
char* s1;
strcpy(s1,"smilehihi");
s1[6] = 'a';

Когда я компилирую, VS не имеет никаких ошибок. Но во время выполнения мой код допускает ошибку. Я думаю, что я не очень понимаю о strcpy

Ответы [ 4 ]

2 голосов
/ 21 апреля 2020

Основная проблема здесь не в функции strcpy(), а в том, что вы не выделяете память для самой строки. На вашем месте я бы сделал что-то вроде

char* s1=(char*)malloc(SIZE); // the SIZE is the predefined maximum size of your string
strcpy(s1,"smilehihi");
s1[6] = 'a';

Редактировать:

Просто в качестве совета рассмотрите возможность использования stpncpy(). Это помогает избежать переполнения буфера и, в вашем случае, поможет вам избежать превышения максимального размера char*

char * stpncpy(char * dst, const char * src, size_t len);
1 голос
/ 21 апреля 2020

Сначала вы должны выделить char* s1.

char *s1 = new char[9]; // C++ version

или вы можете использовать C версию:

char *s1 = (char*)malloc(9);

Затем вы можете использовать следующий код:

strcpy(s1, "smilehihi");
s1[6] = 'a';
1 голос
/ 21 апреля 2020

Вам нужно сначала выделить переменную с помощью mallo c () или с помощью ключевого слова new. Также освободите память в конце

1 голос
/ 21 апреля 2020

Проблема в том, что вы не выделили места для того, что вы хотите sh хранить в s1: "smilehihi". Вы объявляете s1 как переменную-указатель, но на это нужно что-то указать. Вы можете выделить место с помощью оператора new.

char* s1 = new char[stringLength + 1]; //stringLength = length of string stored
                                       // + 1 to hold null terminator character
strcpy(s1, "smilehihi");
s1[6] = 'a';

Вы должны объявить #define _CRT_SECURE_NO_WARNINGS в верхней части основного файла, чтобы избежать ошибки во время компиляции из-за устаревшего strcpy ().

...