为什么这段代码不起作用?
int main(){
char *str ="abcde";
scanf("%s",str);
printf("%s",str);
}
但这有效吗?
int main(){
char str[] ="abcde";
scanf("%s",str);
printf("%s",str);
}`
答案 0 :(得分:5)
在第一个代码中,您声明一个指向string literal:"abcde"
的指针。
这可能是一个常数,你将无法改变它。
第二个代码是声明一个数组并用['a','b',c','d','e','\0']
填充它,并且不是常量 - 所以你可以改变它。
答案 1 :(得分:4)
因为char *str ="abcde";
是指向字符串文字的指针,它很可能存储在只读存储器中。
char str[] ="abcde";
是使用"abcde"
初始化的数组。
答案 2 :(得分:1)
当字符串值直接分配给指针时,它存储在一个 只读块(通常在数据段中),它们之间共享 功能
char *str = "GfG";
...
char str[] = "GfG"; /* Stored in stack segment like other auto variables */ *(str+1) = 'n'; /* No problem: String is now GnG */