1.char * str1; scanf("%s", str1 ); printf( "%s", str1 );
2.char str2[2];scanf("%s", str2 ); printf( "%s", str2 );
以上两个东东,结果是一样的。
不管你输入几个字符,都会照样输出。为什么数组的2没有起到作用呢?而且不为str1分配内存,也可以照样存储呢?有谁能为我说明一下其中的原理~~~
C语言串输入问题!
答案:2 悬赏:60 手机版
解决时间 2021-05-01 04:05
- 提问者网友:山高云阔
- 2021-04-30 16:33
最佳答案
- 五星知识达人网友:持酒劝斜阳
- 2021-04-30 17:30
这两种行为都属于危险行为:
char * str1; scanf("%s", str1 ); printf( "%s", str1 );如果是用VC来运行就会出运行时错误,VC中未初始化的指针并不赋值为0,因此可能会指向你无权使用的内存地址而引发内存异常。
char str2[2];scanf("%s", str2 ); printf( "%s", str2 );程序在编译时是不知道你将来会输入多长的字符串的,所以编译的时候不报错。当你输入的字符数为两个或者更多时,就会出现越界访问的问题,同样可能会破坏内存中的正常数据。
全部回答
- 1楼网友:天凉才是好个秋
- 2021-04-30 17:45
str1这是个野指针,你不给它初值如果是在栈里声明的(按你的说法也只能是在栈里,全局变量默认初始化为0),它指到什么地方天晓得,如果侥幸指到一个可以用来scanf的地址,那么程序运行成功了,但那个地址却极有可能是你定义的其他变量驻留的内存,或者为程序的其他部分所用。
这本身就是无理的操作,既然知道str1没有分配内存,就不应当给它scanf,不要被表面想象所蒙蔽。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯