我对C中的fgets和fscanf有疑问.这两者之间到底有什么区别?例如:
char str[10]; while(fgets(str,10,ptr)) { counter++; ...
和第二个例子:
char str[10]; while(fscanf(ptr,"%s",str)) { counter++; ...
当有一个包含由空格分隔的字符串的文本文件时,例如:AB1234 AC5423 AS1433.在第一个示例中,while循环中的“counter”将不会提供与第二个示例中相同的输出.当更改fgets函数中的“10”时,计数器将始终给出不同的结果.这是什么原因?
还有人可以解释一下fscanf究竟做了什么,每个while循环中的字符串有多长?
解决方法
函数fgets读取直到换行符(并且还存储它).带有%s说明符的fscanf读取直到任何空格并且不存储它…
作为旁注,您没有在scanf中指定缓冲区的大小,并且它不安全.尝试:
fscanf(ptr,"%9s",str)