#include<stdio.h>
#define MAX 1024
int main()
{
unsigned char str[MAX] ;
int m ;
printf("请输入一个字符串 : ") ;
fgets((char *) str , MAX , stdin) ;
for(m = 0 ; str[m] ; m ++) {
if(m) printf(" ") ;
printf("%02x" , str[m]) ;
}
printf("\n") ;
printf("count = %d\n" , m) ;
}
编译、运行实况:D:\[exercise]\C>g++ -o x x.c
D:\[exercise]\C>x
请输入一个字符串 : I Love fishC
49 20 4c 6f 76 65 20 66 69 73 68 43 0a
count = 13
D:\[exercise]\C>
这个代码与楼主的代码功能基本一样,不同之处是在输出统计结果之前,添加了打印输出所键入每一个字符的十六进制 ASCII 编码的功能。
运行这个代码可以发现,每次的统计字符数确实比键入字符数量多出1个,可是,每次的最后一个字符的 ASCII 编码值一定是 0x0a,没错,是回车字符 '\n' 的 ASCII 编码,于是,可以得出结论,通过 fget() 从键盘获取到的字符串一定会比实际输入多出一个 '\n' 字符,这个字符一定位于字符串的末尾。 |