如何从\ n分隔文件中读取字符串

时间:2010-04-27 03:52:47

标签: c stdio fgets scanf

我正在尝试读取返回分隔文件。充满了短语。

我正在尝试将每个短语放入一个字符串中。

问题是当我尝试用

读取文件时
fscanf(file,"%50s\n",string);

字符串只包含一个单词。当它与空格碰撞时,它会停止读取字符串

5 个答案:

答案 0 :(得分:5)

fscanf(file,"%50[^\n]\n",string);
  1. \n以外的所有字符都将被[^\n]消费

  2. 最多会消耗50个字符(确保字符串至少有51个空格)

  3. .. \n ",string这可确保\n也被消耗,以便下次调用不会返回null string。

答案 1 :(得分:3)

<fscanf %s fgets在找到空格时停止读取。

由于您正在阅读未格式化的文本,因此您可以简单地使用\n,它会读取直到它填充您提供的缓冲区,它会找到换行符({{1}}),或者它到达结尾-file,以先到者为准。

答案 2 :(得分:2)

可以修改fscanf以读取过去的空格。细节有点复杂。以下是手册页中有关%[...]

的内容
  

匹配非空的序列   来自指定集合的​​字符   接受的人物;下一个指针   必须是指向char的指针,并且那里   必须有足够的空间容纳所有人   字符串中的字符加上a   终止NUL字符。通常   跳过领先的白色空间是   抑制。要制作字符串   在(或不在)a中的字符   特别设定;该集由定义   开放之间的人物   括号[字符和关闭   括号]字符。该集不包括在内   如果是第一个那些字符   打开括号后的字符是   旋风^。包括收盘价   在集合中的支架,使它成为第一个   开放括号后的字符   旋风;任何其他职位   将结束该集。连字符   性格 - 也很特别;什么时候   放在另外两个角色之间,   它添加了所有插入的字符   集合。要包含连字符,请制作它   决赛前的最后一个角色   关闭括号。例如,   `[^] 0-9-]'表示设置``所有东西   除了近括号,零通过   九,连字符''。字符串结束   没有人物的外观   在(或,有旋律,in)集   或当字段宽度用完时。

所以,%[^ \ n]应该读取回车的所有内容。

答案 3 :(得分:2)

Avoid using scanf.如前所述,您应该使用fgets代替。

如果您不想使用固定大小的缓冲区并允许任意长度的行,您可以尝试使用Chuck Falconer's public domain ggets function。 (那个链接现在似乎已经下降,但是archive.org has a copy。)

答案 4 :(得分:-1)

使用Payload_ID 00 01 02 03 .... 10

初始发送数据

使用

char * pChar =&#34;&#34; ; //用于字符串捕获。

fprintf(fp1,&#34;%s&#34;,strtok(pChar,&#34; Payload_ID&#34;));