C-中的字符串是char * str,真的等同于char str []吗?

时间:2011-08-27 09:34:58

标签: c

  

可能重复:
  Difference between char *str="STRING" and char str[] = "STRING"?
  Need some help with C programming

此剪辑会出现分段错误

int main(void) {

    char*  str ="abcde";
    str[strlen(str)-1] ='\0';
    printf("%s",str);
    return 0;
}

如果我放  char str [] ="abcde";而不是完美运作的指针,你知道为什么会这样吗?

3 个答案:

答案 0 :(得分:8)

当您编写char *str = "abcde";时,您会创建一个指向字符串文字的char指针,但您不能修改该字符串。

当您编写char str[] = "abcde";时,您创建一个char数组并将字符串文字复制到其中。这只是一个普通的char数组,因此您可以自由修改它。

修改字符串文字是未定义的行为。这是一个深思熟虑的设计决策,允许将字符串文字放在输出程序的特殊只读部分。在实践中,许多编译器和平台都这样做(将其标记为只读意味着您只需要在内存中只有一个字符串副本,即使程序运行的实例不止一个)。这会导致您在平台上观察到的行为。

答案 1 :(得分:2)

char *str = "abcde";

str是指向字符串文字的char的指针。字符串文字存储在只读存储器中。你无法修改它们。

char str[] = "abcde";

将字符串文字"abcde"复制到数组str中。所以你可以修改它。

答案 2 :(得分:1)

char *是指向char(字符串文字)的指针,char []是char数组。您无法修改字符串文字,但可以修改字符数组。