题 strcpy [duplicate]的分段错误


这个问题在这里已有答案:

我想知道为什么我在下面的代码中出现分段错误。

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

12
2018-04-26 02:53


起源




答案:


你还没有初始化 *str_new 所以这只是复制 str_old 到一些随机地址。 你需要这样做:

char str_new[100];

要么

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

你不得不 #include <stdlib.h> 如果你还没有使用malloc函数。


22
2018-04-26 02:57





str_new 是一个未初始化的指针,所以你试图写一个(准)随机地址。


7
2018-04-26 02:55





因为 str_new 没有指向有效的内存 - 它是未初始化的,包含垃圾,并且可能指向内存,如果你遇到分段错误,它甚至都不会被映射。你必须做 str_new 指向一个有效的内存块,足以容纳感兴趣的字符串 - 包括 \0 最后的字节 - 在调用之前 strcpy()


2
2018-04-26 02:56