fscanf和换行符

时间:2012-11-04 19:07:04

标签: c regex file-io

我有fscanf从配置文件中读取设置行。这些设置具有严格预定义的格式,看起来像

name1=option1;
name2=option2;
...

所以基本上我做了

fscanf(configuration,"%[^=]=%[^;];",name,option);

其中configuration是文件流,name和option是编程缓冲区。

问题是名称缓冲区包含我不想要的换行符。是否有格式说明符我在“[^ ...]”设置中错过了跳过换行符?无论如何,它可以通过格式说明符解决吗?

BTW:通过写这个

吞下换行符
"%[^=]=%[^;];\n"

并不是一种优势,我认为换行符可以在任何地方重复多次。

3 个答案:

答案 0 :(得分:12)

只需在格式字符串的末尾添加空格:

"%[^=]=%[^;]; "

这会占用所有空白字符,包括换行符。

来自cplusplus.com的报价:

  

空白字符:该函数将读取并忽略在下一个非空白字符之前遇到的任何空白字符(空白字符包括空格,换行符和制表符 - 请参阅isspace)。格式字符串中的单个空格验证从流中提取的任何数量的空白字符(包括无)。

答案 1 :(得分:7)

另一种方法是使用fgets()将整行读入字符串,然后使用sscanf()。这在调试方面具有优势,因为您可以准确地看到该函数正在处理哪些数据。

答案 2 :(得分:1)

这将有效:

fscanf(configuration,"%[^=]=%[^;];%[^\n]",name,option,dummy);

您必须使用新的换行符。否则,换行符将保留在输入流中。

相关问题