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]
。
\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是您可以指定的分隔符