6

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

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

问题是当我尝试读取文件时

fscanf(file,"%50s\n",string);

该字符串仅包含一个单词。当它碰到一个空格时,它会停止读取字符串

4

5 回答 5

5
fscanf(file,"%50[^\n]\n",string);
  1. \n除了将被消耗的每个字符[^\n]

  2. 将消耗最多 0f 50 个字符(确保字符串至少有 51 个空间)

  3. ..\n",string这确保它\n也被消耗,以便下一次调用不只是返回一个空字符串。

于 2010-04-27T03:58:12.123 回答
3

fscanf当它发现空白时%s停止阅读。

由于您正在阅读未格式化的文本,因此您可以简单地使用fgets,它会一直读取直到填满您给它的缓冲区、找到换行符 ( \n) 或到达文件末尾,以先到者为准。

于 2010-04-27T03:54:49.880 回答
3

避免使用scanf. 如前所述,您应该fgets改用。

如果您不想使用固定大小的缓冲区并允许任意长度的行,您可以尝试使用Chuck Falconer 的公共域ggets功能。(该链接现在似乎已关闭,但archive.org 有一个副本。)

于 2010-04-27T04:02:00.670 回答
2

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

匹配指定的可接受字符集中的非空字符序列;next 指针必须是指向 char 的指针,并且必须有足够的空间容纳字符串中的所有字符,外加一个终止 NUL 字符。前导空白的通常跳过被抑制。字符串由特定集合中(或不在)中的字符组成;该集合由左括号 [ 字符和右括号 ] 字符之间的字符定义。如果左括号后的第一个字符是抑扬符 ^,则该集合排除这些字符。要在集合中包含右括号,请将其作为左括号或抑扬符之后的第一个字符;任何其他位置将结束该组。连字符 - 也很特殊;当放置在其他两个角色之间时,它将所有中间字符添加到集合中。要包含连字符,请将其设为最后一个右括号之前的最后一个字符。例如,“[^]0-9-]”表示集合“除了右括号、0 到 9 和连字符之外的所有内容”。字符串以出现不在(或,带有抑扬符,in)集中的字符或字段宽度用完时结束。

因此, %[^\n] 应该读取所​​有内容,直到回车。

于 2010-04-27T03:59:36.307 回答
-1

最初使用 Payload_ID 00 01 02 03 ....10 发送数据

利用

字符 *pChar="" ; //用于字符串捕获。

fprintf(fp1, "%s", strtok(pChar,"Payload_ID"));

于 2017-05-04T06:19:17.553 回答