我尝试了以下程序:
#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 编译时不会发生崩溃。为什么是这样?