【问题标题】:strings in C- is char *str is really equivalent to char str []? [duplicate]C- 中的字符串是 char *str 真的等价于 char str [] 吗? [复制]
【发布时间】:2011-11-05 00:50:37
【问题描述】:

可能的重复:
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"; 而不是完美工作的指针,你知道为什么会这样吗?

【问题讨论】:

标签: c


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:
    char *str = "abcde";
    

    str 是指向 char 的指针,它指向字符串文字。字符串文字存储在只读内存中。你不能修改它们。

    char str[] = "abcde";
    

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

    【讨论】:

    • 字符串字面量可以存储在只读内存中
    【解决方案3】:

    char * 是指向 char(字符串字面量)的指针,char [] 是一个 char 数组。您不能修改字符串文字,但可以修改 char 数组。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-06-15
      • 1970-01-01
      • 1970-01-01
      • 2021-03-11
      • 2011-04-21
      • 2015-10-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多