【问题标题】:segmentation fault with strcpy [duplicate]strcpy的分段错误[重复]
【发布时间】: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;
}
【问题讨论】:
标签:
c
segmentation-fault
strcpy
【解决方案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>。