Ошибка сегментации с помощью 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().