输入字符串China,分析程序改动后显示结果变化的原因是什么?

xhwzdp 2019-12-30 04:49:50
#include <stdio.h> int main{ char c[5];int i; scanf("%s",c); for(i=0;i<=1;i++) printf("%c",c[i]); printf("\n" );return 0; } 输出结果是Ch #include <stdio.h> int main(){ int(这里char改成了int) c[5]; int i; scanf("%s",c); for(i=0;i<=1;i++) printf("%c",c[i]);printf("\n");return 0; }这里输出结果是Ca,小白想知道一下是为什么
...全文
62 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
lin5161678 2019-12-30
  • 打赏
  • 举报
回复
其他人的讨论基本解答你的疑问了 我说点和你的疑问没关系的事情 你的数组才5个元素 %s输入China 加上字符串结尾的0 是6个字节 越界操作 很危险 注意改正
柒贰伍玖 2019-12-30
  • 打赏
  • 举报
回复
char 数组 一个元素占一个字节 int 数组一个元素占4个字节 所以 char[5]是:【0】 【1】 【2】 【3】 【4】 字节: 0 1 2 3 4 int[5]是:【0】 【1】 【2】 【3】 【4】 字节: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 输入%s是字符串,每个字符占一个字节 China分别对应:0 C, 1 h, 2 i, 3 n, 4 a 所以会出现你说的现象
自信男孩 2019-12-30
  • 打赏
  • 举报
回复
int在楼主这里应该是占4个字节,
"China",%s格式输入,前四个字节存"Chin",第五个字节存'a'
c[0]占四个字节,%c是输出一个字节,因此是'C',c[2]是第二个4字节,也是输出一个字节,因此是'a'

个人见解,建议把c[0]的四个字节分别输出验证一下上面的推断。
寻开心 2019-12-30
  • 打赏
  • 举报
回复
原因就是整数是:
int 是四个字节
char 是一个字节
scanf进去后, 第一个整数占据了4个字符,第二个占据了一个字符
输出的时候,指定是字符,传递的是整数,但是也只输出了最后第一个字符(对应整数的最低字节)

你可以做一个联合体
union T {
int n
char ch[4];
} t;
t.n = c[i];
然后你看看 t.ch【0】 -- t.ch【3】 都是什么东西

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧