Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何从分隔文件中读取字符串\n_C_Stdio_Fgets_Scanf - Fatal编程技术网

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

C 如何从分隔文件中读取字符串\n,c,stdio,fgets,scanf,C,Stdio,Fgets,Scanf,我正在尝试读取一个返回分隔的文件。充满了短语 我正试着把每个短语串成一个字符串 问题是当我试图用 fscanf(file,"%50s\n",string); 字符串仅包含一个单词。当它与空格碰撞时,它停止读取字符串fscanfwith%s在找到空白时停止读取 由于您正在读取未格式化的文本,因此只需使用fgets,它会一直读取,直到填满您提供给它的缓冲区,它会找到一个换行符(\n),或者它到达文件的末尾,以先到者为准 fscanf(file,"%50[^\n]\n",string); 除了\n

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

我正试着把每个短语串成一个字符串

问题是当我试图用

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

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

fscanf
with
%s
在找到空白时停止读取

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

fscanf(file,"%50[^\n]\n",string);
  • 除了
    \n
    之外的每个字符都将被
    [^\n]

  • 将消耗最多50个字符(确保字符串至少有51个字符的空间)

  • \n
    ”,string
    这确保
    \n
    也被使用,以便下一次调用不只是返回空字符串


  • fscanf可以修改为读取过去的空格。细节有点复杂。下面是手册页上关于%[…]的内容

    匹配一个非空的 来自指定集合的字符 接受的字符;下一个指针 必须是指向char的指针,并且 必须有足够的空间容纳所有的人 字符串中的字符,加上 终止NUL字符。通常 不允许跳过前导空格 抑制。要制作字符串 角色在(或不在)一个 特定集合;集合由 两个角色之间的关系是开放的 括号[字符和结束符] 括号]字符。该集不包括 如果第一个 开括号后的字符是 扬抑符^。包括一个结束符 在集合中使用括号,使其成为第一个 开括号后的字符或 回旋;任何其他位置 将结束集合。连字符 角色-也是特殊的;当 放在另外两个字符之间, 它将所有中间字符添加到 集合。若要包含连字符,请将其设置为 决赛前的最后一个字符 关闭括号。例如, `[^]0-9-]”表示集合“一切” 除右括号外,归零至零 9和连字符“”。字符串结束 以一个人物的外表而不是 在(或,带扬抑符的,在)集合中 或者当字段宽度用完时

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

    如前所述,您应该使用
    fgets


    如果您不想使用固定大小的缓冲区并允许任意长度的行,可以尝试使用。(该链接现在似乎已关闭,但是。)

    使用有效负载初始发送数据\u ID 00 01 02 03…10

    使用

    char*pChar=”“;//用于字符串捕获


    fprintf(fp1,“%s”,strtok(pChar,“有效负载ID”))

    这很奇怪。它不会读取每一行。每个字符串不是以\0结尾而是以\n结尾,每个字符串仍然以
    '\0'
    结尾,但之前的最后一个字符通常是
    '\n'
    ,因为它读取的行与文件中显示的行完全相同。如果
    '\n'
    不存在,则表示缓冲区不够大,无法容纳整行,或者您只是读取文件中的最后一个字符,但没有换行。它读取换行之前的所有内容,但不读取换行本身。如果您循环使用
    fscanf(文件,“%[^\n]”)
    ,您只需反复获取空字符串。您需要在格式字符串中使用空格或类似于
    %*c
    @Adam Good points的内容来使用换行符。对于缓冲区溢出错误,上面接受的答案也更安全。此处Payload\u ID是您可以指定的分隔符