这个c语言基本问题,你能解吗?

来源:百度知道 编辑:UC知道 时间:2024/05/21 10:49:47
程序一:
#include <stdio.h>
void main()
{
char b[10];
int i;
char a;
for(i=0;(a=getchar())!='\n';i++)
b[i]=a;
puts(b);
}
程序二:
#include <stdio.h>
void main()
{

int i;
char a;
char b[10];
for(i=0;(a=getchar())!='\n';i++)
b[i]=a;
puts(b);
}
首先声明,我知道有更好,更简单的写法,我这样写是为了更好的理解c语言,只有充分的理解c语言,才能写出高效,可靠的程序.我的疑问是假如程序一和二都输入as后,程序一的结果是:as汤汤汤汤汤?(这里还有个符号,打不出来,它的ascii值是18)
而程序二的结果是:as汤汤汤汤汤
?(这里还有个符号,打不出来,它的ascii值是18)
为什么int i;char a;char b[10];换一下顺序,结果就不同了呢?,为什么我输入只是as出来的结果是:as汤汤汤汤汤?(这里还有个符号,打不出来,它的ascii值是18)啊,不是输出函数遇\0就停止了吗,我是什么地方写错了吗,请各位高手帮小弟看一下,小弟感激不尽!

个人认为这涉及到编译器的问题了,不属于基本问题!!!
首先你的代码就是不符合规范的(没有边界保护),你只输入了两个值却要他打十个值。至于结果不同的原因,我认为应该跟内存位置有关(先声明的变量占用了靠前的内存位置),属于编译原理内容。不同的编译器及电脑都会有不同的结果,你换台电脑说不定2个结果业可能变一样了。
至于说puts()遇0就停了,但是你没给它0啊,它当然要乖乖的打10个值出来才停....

char b[10] = "";
你的字符串没初始化啊。

请先初始化b[10]再说

首先你 b[10];没有初始化
那个”汤”是内存中本来就有的,由于没有初始化所以出来的是随机值!!和你定义的位置是没有关系的.
还有你FOR循环的结束标记是'\n'而不是'\o'