为什么这段代码不起作用?字符指针
int main(){
char *str ="abcde";
scanf("%s",str);
printf("%s",str);
}
但这个工程?
int main(){
char str[] ="abcde";
scanf("%s",str);
printf("%s",str);
}`
为什么这段代码不起作用?字符指针
int main(){
char *str ="abcde";
scanf("%s",str);
printf("%s",str);
}
但这个工程?
int main(){
char str[] ="abcde";
scanf("%s",str);
printf("%s",str);
}`
在第一个代码,你声明的指针,它指向一个string literal:"abcde"
。
这可能是一个常数,你将无法改变它。
第二个代码是声明一个数组并填入['a','b',c','d','e','\0']
,它不是一个常量 - 所以你可以改变它。
因为char *str ="abcde";
是一个指向字符串的指针,它最有可能存储在只读存储器中。
char str[] ="abcde";
是一个用"abcde"
初始化的数组。
当字符串值被直接分配给一个指针,它是存储在只读块(通常以数据段)一个 ,其中 功能
共享...
char str[] = "GfG"; /* Stored in stack segment like other auto variables */ *(str+1) = 'n'; /* No problem: String is now GnG */
nice article.thanks :) – code4fun 2012-02-19 01:03:23
这个问题是由[SOFAQ条目]回答(http://loungecpp.wikidot.com/faq#stringliterals) – 2012-02-19 01:20:03