我尝试了以下程序:
#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
}
Run Code Online (Sandbox Code Playgroud)
s2并s4导致分段错误,大概是因为它们存储在只读数据段中。怎么会在文字字符串的指向s1和s3不崩溃?这是在 Ubuntu 上。
奇怪的是,s1, s2,s3和s4都可以修改,并且在 cygwin 上使用 gcc …