使用fscanf时需要定义的缓冲区大小是多少?

时间:2018-07-10 10:53:24

标签: c scanf

仅使用以下行给出文件:

  

abc

     

第二行为空。

如何用fscanf读取它?

选项1:

FILE* f = fopen("f","r");
char str[3];
fscanf(f , "%s" , str); 

选项2:

FILE* f = fopen("f","r");
char str[4];
fscanf(f , "%s" , str);

正确的方法是什么?

1 个答案:

答案 0 :(得分:1)

正确的方法是在fscanf的格式字符串中指定长度。文档中的相关行是:

  

字符串输入转换存储一个终止的空字节('\ 0')来标记输入的结尾;最大字段宽度不包含此终结符。

在第一种情况下,必须是

fscanf(f , "%2s" , str);

在第二种情况下:

fscanf(f , "%3s" , str);

因此,“正确”选项将是第二个。