我有以下代码,很难理解它为何以这种方式工作:
char* str = "HELLO";
printf("%s",&str[0]); //Returns Hello as expected
printf("%c",str[2]); //Returns L as aspected
scanf("%s",&str); //I enter aaaa
printf("%s\n",&str); /* If I want to access the word I have to do this way
&str[0] now gives a segmentation fault.*/
printf("%c\n",&str[1]); /*This gives a b???!!!. I haven't found any way to
access individual character with *str.*/
我对为什么似乎无法访问各个字符特别感兴趣,尽管从某种意义上说,尽管这样做很有意义,但毕竟应该声明一个指向char的指针,但我想知道它如何在字符串中工作某种方式。但是我想知道为什么第一个按预期的那样以字符数组的方式工作,而不是第二个按预期的方式工作。
谢谢。
最佳答案
scanf("%s",&str);
调用未定义的行为:您要求scanf
读取一个字符串并将其存储在str
指针本身的位置中,而不是它指向的位置,这是一个字符串文字,也不应修改。