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

时间:2013-03-10 13:56:08

标签: 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;
}

3 个答案:

答案 0 :(得分:6)

字符串文字的类型为char[],存储在只读内存中。你无法改变它们。

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

你可以这样做:

char foo[] = "Hello";
foo[0] = 'G';
printf("%s", foo);

答案 1 :(得分:3)

因为你不能修改字符串文字(尽管它们是非const char的数组类型)。您的程序按原样调用未定义的行为。

答案 2 :(得分:0)

char *arr[] = {"hello" , "world"};  

arr是指向char的指针数组,因此您无法修改指针所指向的字符串文字。

char arr[][6] = {"hello" , "world"}; 

arr是字符的二维数组 - 或两个字符串的数组。您可以修改它们,但需要指定数组的第二个维度的长度。它需要足够大以容纳最长的字符串。