|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
在谭浩强的《C程序设计(第5版)》的 P158 对puts和gets进行了介绍。
/*
gets(字符数组)是从终端输入一个字符串到字符数组,并将该数组起始地址作为函数值。如:
gets(str); //str是已定义的字符数组
在键盘输入: computer
则将该字符组送给字符数组str(注意此处共送给数组9个字符,而非8个)。
*/
以上是书本原文。
很理所当然地,我认为这“第9个”字符应该就是 '\0' 而非 '\n' 。为了验证这个想法我就写下了以下代码:
#include <stdio.h>
#include <string.h>
int main(){
char str1[30];
int i;
gets(str1);
for(i=0;str1[i]!='\0';i++){
printf("%d ",str1[i]); //将各个字符的ASCII码打印出来
}
return 0;
}
在键盘上输入 123回车 这四个字符后,得到的结果是:
只打印出了“123”这3个字符的ASCII码,看来想法可能是对的。
但是,最后这个回车是保留在缓冲区等待被接受?还是已经被接受作为'\0'输出了?
我为了找答案又写下了以下代码:
#include <stdio.h>
#include <string.h>
int main(){
char str1[30],str2[30];
int i,j;
gets(str1);
getchar(); //假设'\n'还停留在缓冲区,那么可以被这一行吃掉
gets(str2);
for(i=0;str1[i]!='\0';i++){
printf("%d ",str1[i]); //将各个字符的ASCII码打印出来
}
putchar('\n');
for(j=0;str2[j]!='\0';j++){
printf("%d ",str2[j]); //将各个字符的ASCII码打印出来
}
//putchar('\n');
//puts(str1);
//putchar('\n'); 可以随时修改
puts(str2);
return 0;
}
在键盘上输入 123回车123 这7个字符之后会怎样?
|
|