数组不赋值,应该是补空符号,而这个是补a;why - 爱问答

(爱问答)

数组不赋值,应该是补空符号,而这个是补a;why

#include <stdio.h>

 

int main()

{

int i;

char a[10]={'h','e','l','l','o'};

for (i=0;i<10;i++)

printf("%c",a[i]);

return 0;

}

结果:

d: mp>gcc context_curiosity.c

 

d: mp>a.exe

helloaaaaa


① 答案B是正确的;② for循环里面scanf,i的变化范围是0~9(共10个),当i = 10时,退出循环;这时a里面的有效值是a[0]~a[9],这时再a[i=10]='',就是在a的第11位置上放入了一个字符'',这个字符叫结尾符(terminating null character),它只是告诉系统这个字符串到此为止,而它本身不算在字符串的长度里面。③ 而你输入了Fig flow is red.这是18个字符(包括空格和.)。a只取了头10个字符,那么剩余的字符被留在系统的键盘缓冲区中,这时后面再一条gets语句,就把剩余的都读到字符串(字符数组b)中了,注意:gets会自带在读取结束后在字符串的末尾添加一个'' (而你输入结束时,按了一个回车键,其实这个也是一个字符,' ',这个字符被留在键盘缓冲区中,gets没有读取)④ 这样字符串(数组)a和b共同完成了对你输入的Fig flower is red. 这个字符串的读取工作。上面提到的字符'',' '都属于非显示字符,因此你printf的时候不会出现(如果字符串中有' ',虽然不会显示,但会让输出另起一行,这也正是你printf的格式控制串中 的原因)。⑤ 题外话,gets虽然不会读取' ',但另一个函数fgets则会,这也是二者的区别之一~

如果不赋值,数组内也有值(系统默认赋给的);

但是这些默认值是随机的,最好能在程序中对其进行赋值,否则应用此数组时会出现乱码及各种问题。

最后还要在串最后赋一个'',以示此串结束。

下一篇:为什么把java安在U盘显示安装失败

上一篇:为什么C++程序2000行代码可以没有cin和cout函数?

热门标签:
excel 网盘 破解 word dll
最新更新:
微软重新评估新的Outlook的使用时机 联想推出搭载联发科Helio G80芯片组的Tab M9平板 英特尔创新大赛时间确定! 微软Edge浏览器在稳定渠道中推出Workspaces功能 英伟达RTX4060TiGPU推出MaxSun动漫主题! 谷歌地图为用户提供了街景服务! GameSir 在T4 Kaleid中推出了一款出色的控制器! 微软开始在Windows 11 中测试其画图应用程序的新深色模式! LG电子推出全球首款无线OLED电视 英伟达人工智能芯片崭露头角! Steam Deck可以玩什么游戏-Steam Deck价格限时优惠 雷蛇推出CobraPro鼠标 Kindle电子阅读器可以访问谷歌商店吗 Windows10如何加入组策略 window10图片查看器怎么没有了?