strcpy的分段错误

时间:2012-04-26 02:53:52

标签: c segmentation-fault 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;
}

3 个答案:

答案 0 :(得分:25)

您尚未初始化*str_new,因此只是将str_old复制到某个随机地址。 你需要这样做:

char str_new[100];

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

如果您还没有使用malloc函数,则必须#include <stdlib.h>

答案 1 :(得分:7)

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

答案 2 :(得分:2)

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