2011-09-22 127 views
1

可能重复:
Getting Segmentation Faultstrcpy()导致分段错误?

为什么这个代码导致段错误?

char *text = "foo"; 
strcpy(text, ""); 

据我的理解,第一行分配一些内存(持有字符串“foo”)和text指向分配的内存。第二行将一个空字符串复制到text指向的位置。

此代码可能没有多大意义,但它为什么会失败?

+1

看看搜索结果。看他们!@#! http://stackoverflow.com/search?q=strcpy+segmentation+fault – quasiverse

+0

什么是最好的重复?我无法轻松找到它。 – erisco

+2

它们并非全部重复,但错误通常是相同的。 – Mysticial

回答

4

每当你有一个字符串文字(在你的情况下,“foo”),程序将该值存储在只读部分内存中。

strcpy想要修改该值,但它是只读的,因此存在分段错误。

此外,text应该是一个const char*,而不是一个char*

0

因为字符串文字(如"foo")是只读

0

因为字符串文字存储在内存的只读区域。

因此,尝试修改foo(在这种情况下使用strcpy)是未定义的行为