数组和指针创建的字符串之间的区别?
可能重复:
C中的char s []和char * s有什么区别?
这有什么区别:
char arr[] = "Hello, world!";
还有这个:
char *arr = "Hello, world!";
两个字符串的内存分配在哪里? 为什么我无法更改后一个字符串的内容?
第一个是专门为arr
分配的可写内存,它是一个char
数组。 您可以在不调用未定义行为的情况下修改它。 这是完全合法的:
char arr[] = "Hello, world!"; arr[1] = 'i';
第二个是指向只读字符串的指针。 因此,这是未定义的行为 :
char *parr = "Hello, world!"; parr[1] = 'i'; // Cannot write to read-only memory!
在一些编译器实现中:
char *a = "Hello, world!"; char *b = "Hello, world!"; a[1] = 'i'; // b[1] == 'i';
这不能得到保证 – 我只是将它包含在内,让您直观地了解为什么它是未定义的行为。