关于代码的执行顺序 主要tcc+notepad++编译环境;还有字符数组有关问题

关于代码的执行顺序 主要tcc+notepad++编译环境;还有字符数组问题
本帖最后由 haoranhaoran 于 2013-04-02 22:21:58 编辑
#include<stdio.h>
void main()
{
char let[5];
scanf("%c",&let[0]);
printf("%c",let[0]);
scanf("%c",&let[1]);
}

这个在tcc+notepad++执行 会无视第二个scanf
VC++6.0好像也这样
tcc+cmd正常


#include<stdio.h>
void main()
{
char let[5];
gets(let);
puts(let);
gets(let);
}

tcc+notepad++会先执行当中的两个gets再puts
tcc+cmd (tcc -run test.c)正常

请问这执行顺序是怎么回事?
求解 求解决方法





#include<stdio.h>
void main()
{
char let[5];
gets(let);
puts(let);
printf("%c",let[7]);
}

输入:12345678
输出:
12345678
8

为什么能超出数组长度?而且还能正常读取 比如let[7]应该不存在的啊

------解决方案--------------------
1. 第一段是因为还有回车符。第一个scanf接受了你输入的第一个字符,第二个scanf接受了\n(回车键)
2. 执行并非顺序存在问题,只是不能及时输出,个人猜想可能是缺少输出一个\n。没用过那个TCC,所以不知道怎么办。
3. TCC是很古老的编译器了吧,这种没有安全措施的行为是不建议的。