这看起来应该很容易,但我花了太多时间。希望有人可以提供帮助。
char *labels[] = { "apple", "orange" }; // each items inside label is string literal. We can't change them-
请看下面的
char a[]="hi";
char b[]="hello";
char *name[]={a,b};//each item inside name is not string literal rite??
*name="bye";
puts(a);
我认为输出将为bye
,因为我使用a[]
更改了*name="bye"
的内容
但输出仍为hi
。为什么?
答案 0 :(得分:5)
char *name[]={a,b};//each item inside name is not string literal rite??
- 不完全是,每个元素都是指向char
的指针。
所以name
是一个指针数组。 *name="bye"
更改了第一个指针变为的内容。它不会更改旧指针指向的内存。
如果您想这样做,一般会使用strncpy
,但请注意,此处您没有足够大的阵列来执行此操作。
(我也希望你的编译器能给你一个关于为const char *
char*
分配*name="bye"
的警告
在*name="bye"
之前:
*name="bye"
之后: