Ошибка сегментации с помощью strcpy
Мне интересно, почему я получаю ошибку сегментации в приведенном ниже коде.
int main(void)
{
char str[100]="My name is Vutukuri";
char *str_old,*str_new;
str_old=str;
strcpy(str_new,str_old);
puts(str_new);
return 0;
}
Ответы
Ответ 1
Вы не инициализировали *str_new
, поэтому просто копируете str_old
на какой-то случайный адрес.
Вам нужно сделать следующее:
char str_new[100];
или
char * str = (char *) malloc(100);
Вам понадобится #include <stdlib.h>
, если вы еще не используете функцию malloc.
Ответ 2
str_new
- неинициализированный указатель, поэтому вы пытаетесь записать на (квази) случайный адрес.
Ответ 3
Потому что str_new
не указывает на действительную память - он не инициализирован, содержит мусор и, вероятно, указывает на память, которая даже не отображается, если вы получаете ошибку сегментации. Вы должны сделать str_new
указателем на допустимый блок памяти, достаточно большой, чтобы удерживать интересующую строку - включая байт \0
в конце - перед вызовом strcpy()
.