由scanf引发的思考
#include <stdio.h>
main()
{
int n=5;
char c[5];
for(int i=0; i <n; i++){
scanf("%c",&c[i]);
fflush(stdin);}
printf(c);//为什么输出会多出奇怪的字符
return 0;
}
这是我最初的问题代码,是啊,为什么要输出一些奇怪的字符呢?因为我的数组没有结束字符'/0',就是这个原因!
对于字符串我们平常是这样用的c[5]={"iwai"};或者是c[5]="iwai";其中已将包含'/0'赋给了c[5],以前虽然知道,但是没注意
现在对比这个问题就很有代表性了,所以导致了上面输出的错误情况!
所以上述要将a[4]赋值'/0'才是正确的!
哎,搞的中午午觉都没怎么睡,收工睡觉!
至于为什么就算我没有结尾符号它也只是输出有限的无用数据,也没有因为没有结尾二结不了尾,这个是因为什呢机制呢?目前还不清楚,希望网友的帮助!
输出就是asdfg烫?
为什么计算机输出“烫”,而且我发现我电脑了很多区域都是“烫”
其实是这样的
内存里面会有存放'/0'的地方,打印的时,什么时候遇到内存中有'/0',就在那里结束,所以后面的字符长度是随机的
未初始化的变量会被系统赋初值为0xCC,超过了ASCII码0-127这个范围,因此这个“字符串”被系统当成了宽字符组成的字符串,即两个字节数据组成一个字符,而0xCCCC表示的宽字符正好是乱码中的那个“烫”字
哎,搞的中午午觉都没怎么睡,收工睡觉!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端