为什么以下代码无法修改指针数组中的字符串?

use*_*060 2 c

我正在尝试将字符串"hello"修改为"Hello"但它不起作用,它都没有给出任何错误.可以请某人解释为什么它不起作用.

#include <stdio.h>

int main() {
    char *arr[] = {"hello" , "world"};
    char **p = arr;
    printf("%s\n",arr[0]);
    *(*(p+0)+1) = 'H';
    printf("%s\n",arr[0]);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Ton*_*ion 6

字符串文字属于类型char[],存储在只读存储器中.你无法改变它们.

如果要更改它们,则需要创建一个char数组.你有一个指针数组.

你可以这样做:

char foo[] = "Hello";
foo[0] = 'G';
printf("%s", foo);
Run Code Online (Sandbox Code Playgroud)

  • 它们是`char []`,而不是`const` - 但如果一个程序修改了文字,它就是UB. (2认同)