19

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

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

3 回答 3

35

您尚未初始化*str_new,因此它只是复制str_old到某个随机地址。您需要执行以下任一操作:

char str_new[100];

或者

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

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

于 2012-04-26T02:57:04.193 回答
9

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

于 2012-04-26T02:55:15.260 回答
3

因为str_new它没有指向有效的内存——它未初始化,包含垃圾,并且如果您遇到分段错误,可能指向甚至没有映射的内存。在调用之前,您必须str_new指出一个足够大的有效内存块来保存感兴趣的字符串(包括\0末尾的字节)strcpy()

于 2012-04-26T02:56:08.727 回答