Вопрос по c – ошибка сегментации с помощью strcpy [дубликата]

12

This question already has an answer here:

Crash or “segmentation fault” when data is copied/scanned/read to an uninitialized pointer 4 answers

Мне интересно, почему я получаю ошибку сегментации в приведенном ниже коде.

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;
}

Ваш Ответ

3   ответа
2

str_new не указывает на действительную память - она неинициализирована, содержит мусор и, вероятно, указывает на память, которая даже не отображается, если вы получаете ошибку сегментации. Вы должны сделатьstr_new указать на допустимый блок памяти, достаточно большой, чтобы содержать интересующую строку - в том числе\0 байт в конце - перед вызовомstrcpy().

7

str_new является неинициализированным указателем, поэтому вы пытаетесь записать (квази) случайный адрес.

23

Вы не инициализированы*str_new так что это просто копированиеstr_old на какой-то случайный адрес. Вам нужно сделать либо это:

char str_new[100];

или же

char * str = (char *) malloc(100);

Тебе придется#include <stdlib.h> если вы еще этого не сделали при использовании функции malloc.

Похожие вопросы