永发信息网

C语言串输入问题!

答案:2  悬赏:60  手机版
解决时间 2021-05-01 04:05
1.char * str1; scanf("%s", str1 ); printf( "%s", str1 );
2.char str2[2];scanf("%s", str2 ); printf( "%s", str2 );
以上两个东东,结果是一样的。
不管你输入几个字符,都会照样输出。为什么数组的2没有起到作用呢?而且不为str1分配内存,也可以照样存储呢?有谁能为我说明一下其中的原理~~~
最佳答案

这两种行为都属于危险行为:


char * str1; scanf("%s", str1 ); printf( "%s", str1 );如果是用VC来运行就会出运行时错误,VC中未初始化的指针并不赋值为0,因此可能会指向你无权使用的内存地址而引发内存异常。
char str2[2];scanf("%s", str2 ); printf( "%s", str2 );程序在编译时是不知道你将来会输入多长的字符串的,所以编译的时候不报错。当你输入的字符数为两个或者更多时,就会出现越界访问的问题,同样可能会破坏内存中的正常数据。


全部回答
str1这是个野指针,你不给它初值如果是在栈里声明的(按你的说法也只能是在栈里,全局变量默认初始化为0),它指到什么地方天晓得,如果侥幸指到一个可以用来scanf的地址,那么程序运行成功了,但那个地址却极有可能是你定义的其他变量驻留的内存,或者为程序的其他部分所用。 这本身就是无理的操作,既然知道str1没有分配内存,就不应当给它scanf,不要被表面想象所蒙蔽。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
魔力学堂怎样去工会场景
七夕、你打算怎么过呢?
问问怎么可以建立团
工艺贴金用的什么胶水?
牙儿夼地址在什么地方,想过去办事
菏泽到高密的汽车上午什么时间发车啊
怎么弄好发髻
5320宁波现在报价
赛季篮网真的愿意摆烂吗?
担心人的句子说说心情,对犹豫不决的人,励志的
想一个人,该怎么解决?
炎亚纶的真名是什么?
当好友瘾藏了地理位置,我怎样才能看到他的位
QQ炫舞买光效上衣永久合适还是买光效套装30天
古代钱的子咋打
推荐资讯
儿童绘本怎么画,海里有什么动物
新买的HTC G8才充了三小时灯就变绿的了 灯变
如果不可以爱,你还会去争取吗?
为什么我的NDS机设定语言里没有日语的?快点
西峡县工业电器有限公司在哪里啊,我有事要去
怎样利用手表的指针和太阳来判别方向?
学计算机编程语言一定要英语很好么?
飞车角色生日那天 登录会送上万点券吗?
夸奖别人文笔好的句子,幽默的夸奖别人有本事
什么是补录?等于降分入取吗?
炼妖技能在什么地方学
ipod touch 3 32G关于想升4.0
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?