C语言问题,帮分析分析

来源:百度知道 编辑:UC知道 时间:2024/05/31 12:24:16
第一题:
void main(){
char c[10]="1",i;
for(i=0;i<6;c[i]=getchar())
i++;
printf("%s\n",c);
}

第二题:

void main(){
char s[10]="1,2,3,4,5";
gets(s);
s[3]='X';
printf("%s\n",s);

}

第三题:
void main(){
char s[2][5];
strcpy(s[0],"1234");
strcpy(s[1],"567");
s[0][4]='0';
printf("%s\n",s);
}

题型类似的,答案我有的,就是不明白为什么,我做的答案总是比标准答案少点东西,希望高手帮忙看看,能否说的详细一点,先谢谢啦……
我告诉您结果,在电脑上运算过的,您再帮我分析分析行吧?我不明白为什么……
第一题:
123
4
5
第二题:
ABCX3,4,5
第三题我看明白了,谢谢了……

1)
getchar有一个int型的返回值.当程序调用getchar时.程序就等着用户按键.用户输入的字符被存放在键盘缓冲区中.直到用户按回车为止(回车字符也放在缓冲区中).当用户键入回车之后,getchar才开始从stdin流中每次读入一个字符.getchar函数的返回值是用户输入的第一个字符的ASCII码,如出错返回-1,且将用户输入的字符回显到屏幕.如用户在按回车之前输入了不止一个字符,其他字符会保留在键盘缓存区中,等待后续getchar调用读取.也就是说,后续的getchar调用不会等待用户按键,而直接读取缓冲区中的字符,直到缓冲区中的字符读完为后,才等待用户按键.
根据上边解释的话,结果用文字写是23<回车>4<回车><回车>'\n'
呈现是
23
4
共6个字符,<回车>算是一个字符,'\n'是你printf的

2) ABCX5
原存储单元中存储的是1、2、3、4、5、‘\0’、乱码、乱码、乱码
输入ABC后存储的是A、B、C、‘\0’、5
、‘\0’、乱码、乱码、乱码
你再做s[3]='X'; 就变成A、B、C、‘X、5
、‘\0’、乱码、乱码、乱码

3)12340567
二维数组地址是从s[0][0]....s[0][4]s[1][0]...s[1][4]
在两个strcpy结束的时候s[0][0]....s[0][4]s[1][0]...s[1][4]分别存放的是1、2、3、4、'\0'、5、6、7、'\0'、未知数;s[0][4]='0'执行过后,s[0][0]....s[0][4]s[1][0]...s[1][4]存放的内容变成了1、2、3、4、0、5、6、7、'\0'、未知数 而字符串获取以\0为结束标志,此时打印s即从s[0][0]开始打印遇到第一个'\0'结束,当然结果就是12340