我有一个这样的文件:
10 15
something
我想把它读成树变量,比如说number1,number2和mystring。我怀疑fscanf会给出什么样的模式。我在想这样的事情;
fscanf(fp,"%i %i\n%s",number1,number2,mystring);
这是否有效,而且,这是读取此文件的正确方法吗?如果没有,你会建议什么?
答案 0 :(得分:2)
fscanf(fp,"%i %i\n%s",&number1,&number2,mystring);
fscanf
需要指点。
答案 1 :(得分:1)
使用fgets
(或getline
,如果有的话)阅读每一行,将行分为strsep
(更好,如果可用)或strtok_r
(更尴尬) API但更便携),然后根据需要使用strtoul
将字符串转换为数字。
*scanf
,因为:
"%s"
)与gets
一样急于溢出缓冲区。fgets
然后使用sscanf
代替fscanf
可以稍微减轻这种情况。)答案 2 :(得分:0)
除了指针问题之外,通常在scanf格式中使用空格是一个错误 - 在大多数情况下,scanf会自动跳过空格。所以我会使用类似的东西:
int number1, number2;
char mystring[32];
fscanf("%i%i%31s", &number1, &number2, &mystring)
这将读取两个数字,后跟一个最多31个非空白字符的字符串,全部由任何空格分隔。请注意,“空白”包括空格,制表符和换行符,因此如果它全部在一行上,或者分散在3行或其间的任何内容中都无关紧要。
另请注意,使用字符串大小的限制 - 如果不是这样,输入可能会溢出您提供的任何固定大小的缓冲区(并且无法使用scanf提供可变大小的缓冲区)