strcpy的分段错误[重复]

Posted

技术标签:

【中文标题】strcpy的分段错误[重复]【英文标题】:segmentation fault with strcpy [duplicate] 【发布时间】:2012-05-06 18:46:36 【问题描述】:

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

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 是一个未初始化的指针,因此您正在尝试写入一个(准)随机地址。

【讨论】:

【参考方案2】:

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

【讨论】:

【参考方案3】:

您还没有初始化*str_new,所以它只是将str_old 复制到某个随机地址。 您需要这样做:

char str_new[100];

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

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

【讨论】:

以上是关于strcpy的分段错误[重复]的主要内容,如果未能解决你的问题,请参考以下文章

strcpy给出分段错误

分配时出现分段错误[重复]

C函数调用分段错误[重复]

返回指针时出现分段错误[重复]

总线错误与分段错误

为什么即使目标阵列很小,strcpy也不会抛出错误? [重复]