
关于C语言字符和字符串的问题
程序如下:intmain(){charword[8];scanf("%7s",word);printf("%s\n",word);return0;}上面的程序可以知道wo...
程序如下:
int main(){
char word[8];
scanf("%7s",word);
printf("%s\n",word);
return 0;
}
上面的程序可以知道word是个指针,但是为什么在输出里面word可以直接用,而且成功输出了刚刚输入的字符串呢?如果把第四行改成
printf("%s\n",*word);
就会运行崩溃,但是如果把%s改成%c,就是这样:
printf("%c\n",*word)
就会输出刚刚输入的第一个字母;这是为什么呢? 展开
int main(){
char word[8];
scanf("%7s",word);
printf("%s\n",word);
return 0;
}
上面的程序可以知道word是个指针,但是为什么在输出里面word可以直接用,而且成功输出了刚刚输入的字符串呢?如果把第四行改成
printf("%s\n",*word);
就会运行崩溃,但是如果把%s改成%c,就是这样:
printf("%c\n",*word)
就会输出刚刚输入的第一个字母;这是为什么呢? 展开
2个回答
展开全部
因为printf函数在%s控制下是将对应变量解释为指针,而且从指针这个地址开始一个字符一个字符地把它们依次显示在屏幕上,直到遇到一个'\0'为止,但不输出'\0'。
printf("%s\n",*word);——word是指针,即一个地址,*word是word地址中存放的内容,假设刚刚输入的字符串是012345,那么*word就是'0',即十进制数32;现在printf("%s\n",*word);要把32解释为一个地址,且要像前述1一样从地址32开始输出字符串,可是这能保证32地址不在保护区吗,若系统禁止操作32这个地址,那就要崩溃;再说,根据上述1,要遇到'\0'才停止,谁又能保证从32地址开始后面过多少个字符才能遇到'\0'?太长了也可能要崩溃。
printf("%c\n",*word)——%c被定义为在%c控制下输出一个字符,*word据前述2就是一个字符,不是正好吗?若输入的是012345,那么输出就是'0',这很正常!
追问
也就是说在C语言里面,%c和%s对对应变量的处理方式是不一样的吗?
追答
是。%c把对应变量按一个字符处理,而%s把对应变量按答案1那样处理。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询