在这个语句中:
char *a = "string1"
什么是字符串字面值?这是string1
吗?因为这个线程What is the type of string literals in C and C++?说了不同的东西。
据我所知
int main()
{
char *a = "string1"; //is a string- literals allocated memory in read-only section.
char b[] = "string2"; //is a array char where memory will be allocated in stack.
a[0] = 'X'; //Not allowed. It is an undefined Behaviour. For me, it Seg Faults.
b[0] = 'Y'; //Valid.
return 0;
}
请在以上提到的要点之外添加一些细节。谢谢。
调试输出显示错误在于 a[0] = 'Y';
Reading symbols from /home/jay/Desktop/MI/chararr/a.out...done.
(gdb) b main
Breakpoint 1 at 0x40056c: file ddd.c, line 4.
(gdb) r
Starting program: /home/jay/Desktop/MI/chararr/a.out
Breakpoint 1, main () at ddd.c:4
4 {
(gdb) n
6 char *a = "string1";
(gdb) n
7 char b[] = "string2";
(gdb)
9 a[0] = 'Y';
(gdb)
Program received signal SIGSEGV, Segmentation fault.
0x0000000000400595 in main () at ddd.c:9
char *a = "string1";
应该生成一个编译器警告,警告关于用const char *
值初始化char *
的问题。我猜测之所以没有警告,是因为太多的遗留代码将开始抛出警告。 - Edward Falk