永发信息网

char str[3]; scanf("%s",str); printf("%s",str); 为什么输入超过3个字符,也全部输出?

答案:3  悬赏:0  手机版
解决时间 2021-03-19 08:38
char str[3]; scanf("%s",str); printf("%s",str); 为什么输入超过3个字符,也全部输出?
最佳答案
#include
#include
#include
int main(void)
{
char str[3];
printf("%p %p %p\n",&str[0],&str[1],&str[2]);
scanf("%s",str);
int size = strlen(str);
printf("before:%p %c after:%p %c\n",&str[2],str[2],&str[size-1],str[size-1]);
return 0;
}
输出:
0xbfc7f34d 0xbfc7f34e 0xbfc7f34f //str[3] 定义出来的可用空间
sfhksg
before:0xbfc7f34f h after:0xbfc7f352 g //数组的下标访问本质还是指针操作。可以越界操作

//,不过很危险。可能发生不可预料的结果!

看懂了这个你就了解了为什么可以输出多于3个字符了。
全部回答
%s是用来输出一个字符串。 有几种用法: 1: %s,例如printf(“%s”,“china”);输出china; 2:%ms,输出的字符串占m列,如果字符串本身长度大于m,则突破m的限制,将字符串全部输出。若小于m则左补空格; 3:%-ms,如果字符串长度小于m,则在m列范围内,字符串向左靠,右补空格; 4:%m.ns,输出的字符串占m列,但只取字符串中左端n个字符,这n个字符输出在m列的右侧,左补空格; 5:%-m.ns,n个字符输出在m列范围内的左侧,右补空格。如果n>m,则m自动取n的值,即保证n个字符正常输出
你好。printf输出从str首地址开始到第一个'\0'结束。所以可以全部输出。 关键在于scanf输入没有限制输入长度。事实上输入超过3个字符时,数据访问已经越界了。 程序能够运行已经是运气够好了。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
移动是事业单位吗
青岛 山贺电子城年后什么时候上班啊?有没有
石湖地址有知道的么?有点事想过去
京城蝎府本溪总店这个地址在什么地方,我要处
南昌微整形对于身体有害吗??
《郑人买履》的译文以及字的翻译。速度,6点
经常在空调屋里待着对身体好吗?会有什么后果
卡罗拉行车记录仪文件加锁灯一直亮着如何解除
带柒字的情侣网名
东盟商务区站B口地址在什么地方,想过去办事
太和的爷们 哪位知道太和驾校可不可以办摩托
长城一硬币一套多少个?
平安银行壹钱包有什么用,跟银行卡有什么不同
宝贝儿刚上小学一年级一学期已经要过去了画的
简单粗暴的篮球队队名
推荐资讯
我梦见妈妈在天上走这代表什么我跑不了喊不了
还有一年退休,现在把户口落到另外一个城市对
自私是人的天性吗?
苏州丽丰购物中心 什么电影院
上海佘山怎么样想去玩下
消防管道口边离机械三通多少公分合适
41度36分除以3=?41°36′÷3=?
六尺巷究竟讲的是张英还是张廷玉?
南雪祛痘霜一套三瓶祛痘霜和蛇脂美白能同时用
冒险岛online 90以上级法师装备在哪里刷,刷
朱姓女孩起名四个字
一级职称评审各种证件复印粘贴页怎么贴
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?