****C语言高手请进****

来源:百度知道 编辑:UC知道 时间:2024/05/22 17:53:24
#include <stdio.h>
int main()
{char a[5];
scanf("%s",a);
printf("%s\n",a);
}
当我输入8个字符时,程序会不停的反复,哪位大虾能解释一下为什么会出现这种情况?
当我输入1个字符时,按回车,跳出.
当我输入2个字符时,按回车,跳出.
当我输入3个字符时,按回车,跳出.
当我输入4个字符时,按回车,跳出.
当我输入5个字符时,按回车,跳出.
当我输入6个字符时,按回车,跳出.
当我输入7个字符时,按回车,跳出.
当我输入8个字符时,按回车,不跳出,可继续输入.
当我输入9个字符时,按回车,跳出,但屏幕出现Abnormal program termination.
当我输入10个字符时,按回车,跳出,但屏幕出现Abnormal program termination.
有时程序会全部跳出(跳出Turbo C)(有时输入:qweasdzxcv时会出现)

有时输入字符多了会出现"
16位MS-DOS子系统
TC
NTVDM CPU 遇到无效的指令.
CS:0000 IP:0077 OP:fo 37 05 10 02 选择"关闭"终止应用程序."

各位,想知道为啥会有这情况的请关注我发的另一个贴.

$$$$$C语言$$急切想知道....$$

http://zhidao.baidu.com/question/19048067.html?quesup1

有更高的悬赏分.

这个回答已经说明问题了.

其实你的程序有漏洞,也就是我们经常听到的[缓冲区溢出漏洞]!!!!

#include <stdio.h>
int main()
{char a[5];
scanf("%s",a);
printf("%s\n",a);
}

你只为a分配了5个字符的空间.而你却输入了6个甚至10个字符.这样,你的程序的后面的代码部分将被你输入的字符所代替.导致的结果是:你输入的字符变成了可以执行的代码了.---------------

建议最好不要使用scanf这个函数,如果真的要使用也要分配足够长的空间给他

因为你只设定了五个字符,而且没有相应的控制语句来使其停下来。

可以加一些判断句式进去。

字符变量的取值是字符常量,即单个字符. 每个字符变量被分配一个字节的内存空间.
你定义变量时是字符型 而输入输出时 强制用字符串,所以就是越界了

而C也不对此进行检查‘你越界输入输出后‘编译器就会随意在堆栈地址中提取东西输出~ 而且情况也随着你输入的东西改变‘ 比如说输入10个字符时 根据你输入字符的不同 也会出现不同的情况~~例:输入a 10个 会出现16位MS-DOS子系统..什么的.. 输入10个C会导致程序死,,这都是因为在不同的错误地方提取不同的错误的东西~~ ‘
注:本人学C不足1个月,以上言论纯属猜测,,感觉不对的话‘就不要相信.然后回帖指导,以免误导他人..... 期待高手解答这个问题.我也很想知道 嘿嘿!

C语言就是这样,楼主不用太计较。只要编程时做好错误处理就是了。
不过要是有高手能解释出来,我也很想听听?

汗```没这么玩滴``你想来个溢出袄`
上位虾哥喷的好哇``不过小心别弄个死循环了`嘎嘎`
补充:似乎那个Turbo C不应该你那么玩吧``调试运行是按回车的吗?
老哥你的问题似乎不应该啊

我试了,没有反复啊,只是它也输出了8个字符。