我正在尝试将字符串“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;
}
我正在尝试将字符串“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;
}
字符串字面量属于类型char[]
并存储在只读存储器中。你不能改变它们。
如果要更改它们,则需要创建一个 char 数组。你有一个指针数组。
你可以这样做:
char foo[] = "Hello";
foo[0] = 'G';
printf("%s", foo);
因为您不能修改字符串文字(尽管它们是 non-const 数组类型char
)。您的程序按原样调用未定义的行为。
char *arr[] = {"hello" , "world"};
arr 是指向 char 的指针数组,因此您不能修改字符串文字,指针指向。
char arr[][6] = {"hello" , "world"};
arr 是二维字符数组 - 或两个字符串的数组。您可以修改它们,但您需要指定数组第二维的长度。它需要足够大以容纳最长的字符串。