Что не так с моей strcpy?

Я пытался сделать strcpy себя. Это должно работать, я даже скопировал и вставил (почти точный код) из чьего-то поста здесь о strcpy, Оба дают мне «Ошибка сегментации».

char* strcpy(char * destination, const char * source)
{
while( (*destination++ = *source++) != '\0' )
;
return destination;
}

Что не так с этим кодом?

char* a = "hello";
cout << strcpy(a, "Haha") << endl;

0

Решение

Вы пытаетесь записать в сегмент данных, так как "hello" хранится там.

Поэтому, когда вы звоните strcpy Вы получаете ошибку сегментации.

Пытаться:

char a[] = "hello";
cout << strcpy(a, "Haha") << endl;

вместо.

РЕДАКТИРОВАТЬ: Внутри вашего strcpy функция после копирования, destination будет указывать на конец строки, вам нужно вместо этого вернуть начало строки.

4

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

Вы пытаетесь переписать строковый литерал. Это вызывает неопределенное поведение. декларировать a как массив вместо:

char a[] = "hello";

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

6

a указатель на строковый литерал:

char* a = "hello";

Попытка изменить строковый литерал — неопределенное поведение. Как предложил Карл, если вы инициализируете массив строковым литералом, он будет работать:

char a[] = "hello" ;
3

Помимо всего упомянутого выше и ниже о строковых литералах, вы также возвращаете указатель на КОНЕЦ вашей строки, так что даже если вы избежите ошибки сегментации, вы напечатаете «».

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