关于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)
就会输出刚刚输入的第一个字母;这是为什么呢?
展开
 我来答
White_MouseYBZ
2019-04-13 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:7086万
展开全部
  1. 因为printf函数在%s控制下是将对应变量解释为指针,而且从指针这个地址开始一个字符一个字符地把它们依次显示在屏幕上,直到遇到一个'\0'为止,但不输出'\0'。

  2. printf("%s\n",*word);——word是指针,即一个地址,*word是word地址中存放的内容,假设刚刚输入的字符串是012345,那么*word就是'0',即十进制数32;现在printf("%s\n",*word);要把32解释为一个地址,且要像前述1一样从地址32开始输出字符串,可是这能保证32地址不在保护区吗,若系统禁止操作32这个地址,那就要崩溃;再说,根据上述1,要遇到'\0'才停止,谁又能保证从32地址开始后面过多少个字符才能遇到'\0'?太长了也可能要崩溃。

  3. printf("%c\n",*word)——%c被定义为在%c控制下输出一个字符,*word据前述2就是一个字符,不是正好吗?若输入的是012345,那么输出就是'0',这很正常!

追问
也就是说在C语言里面,%c和%s对对应变量的处理方式是不一样的吗?
追答
是。%c把对应变量按一个字符处理,而%s把对应变量按答案1那样处理。
沐庄答白梦
2019-08-21 · TA获得超过1108个赞
知道小有建树答主
回答量:2428
采纳率:100%
帮助的人:12.9万
展开全部
你好,C语言中,要想让变量接收字符串的话,可以定义数组,C语言中没有字符串赋值功能,除非你一个字符一个字符的赋值给变量。除了一个一个字符的赋值,你可以用字符数组,在定义时候可以一起赋值。而数组也有局限,就是除了定义时可以一起赋值,其他时候就不行,这时就要用指针了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式