int main()
{
char *a="Hello";
char *b="world\n";
strcpy(a,b);
printf("%s,%s",a,b);
}
程序运行的结果是什么?
解析:这道题看上去很简单,实际上不简单。
第一想到的就是strcpy的地址越界问题,所以认为结果可能是:
world
world
或者是运行错误,因为出现了地址越界,对于越界后的地址我们并不知道存的是什么,有可能是很重要的内容。
第二想到的是\n在结果中怎么输出呢,这个问题考虑的多余,\\n才是输出\n,而\n直接以回车形式输出。
第三真正上机运行会发现,即使地址不发生越界,运行也会错误,仔细分析原因,得出如下结论
char *a="Hello"; 其中的"Hello"是字符串常量,存放在常量存储区(具体存放在内存什么位置,还有待于验证),但有一点是肯定的,常量是不允许修改的。
改正:char a[6]="Hello";
或者是 char *a=(char *)malloc(sizeof(char)*6); strcpy(a,"Hello");