数组和指针创建的字符串之间的区别?

时间:2011-09-14 04:33:59

标签: c string

  

可能重复:
  What is the difference between char s[] and char *s in C?

这有什么区别:

char arr[] = "Hello, world!";

而且:

char *arr = "Hello, world!";

两个字符串的内存分配在哪里?为什么我无法更改后一个字符串的内容?

1 个答案:

答案 0 :(得分:5)

第一个是专门为arr分配的可写内存,charchar 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';

一些编译器实现中:

{{1}}

无法保证 - 我只是为了让您“直观”地了解为什么未定义行为。