浅析字符常量区

时间:2022-08-19 15:03:53

以下程序编译环境为gcc

1.

#include <stdio.h>
#include <string.h>

int main()
{
	char* s1 = "Hello";
	s1[0] = 'z';
	printf("%s\n",s1);
	return 0;	
}

编译不会出错,但运行错误Segmentation fault。因为字符串"Hello"在字符常量区,指针s1指向字符常量区,字符常量区是不可更改的,所以(s1[0] = 'z') 这一步错误。
其实,char* s1 = "Hello" 等价于 const char* s1 = "Hello" 
2.
#include <stdio.h>
#include <string.h>

int main()
{
	char s2[] = "world";
	s2[0] = 'z';
	printf("%s\n",s2);
	return 0;	
}
这段程序运行正确。字符串"world"存储在数组s2里,在栈空间中,可以进行修改。