我尝试了以下程序:
#include <stdio.h>
char s1[] = "Global String";
char *s2 = "Another Global String";
main()
{
char s3[] = "Local String" ;
char *s4 = "Another Local String" ;
strcpy( s1, "New str" );
strcpy( s2, "New str" ); // causes seg fault
strcpy( s3, "New str" );
strcpy( s4, "New str" ); // causes seg fault
}
s2
并s4
导致分段错误,大概是因为它们存储在只读数据段中。为什么指向的文字字符串s1
不会s3
崩溃?这是在 Ubuntu 上。
奇怪的是,s1
, s2
,s3
和s4
都可以修改,在 cygwin 上使用 gcc 编译时不会发生崩溃。为什么是这样?