我试图读取一个以回车分隔的文件,里面充满了短语。
我想将每个短语放入一个字符串中。
问题在于,当我尝试使用以下代码读取文件时:
fscanf(file,"%50s\n",string);
字符串只包含一个单词。当它遇到空格时,它停止读取该字符串。
fscanf(file,"%50[^\n]\n",string);
[^\n]
将匹配除\n
以外的所有字符。
最多消耗50个字符(确保字符串至少有51个空间)。
..
\n
",string
这将确保\n
也被匹配,以便下一次调用不会返回空字符串。
fscanf
使用 %s
时遇到空格会停止读取。
由于您正在读取未格式化的文本,因此可以直接使用 fgets
,它将一直读取直到填满您提供的缓冲区、找到换行符 (\n
) 或到达文件结尾为止,以先到者为准。
避免使用scanf
。 如前所述,您应该使用fgets
代替。
如果您不想使用固定大小的缓冲区并允许任意长度的行,请尝试使用Chuck Falconer的公共领域ggets
函数。(该链接目前似乎已经失效,但archive.org有备份。)
fscanf(file, "%[^\n]")
上循环,您将一遍又一遍地得到空字符串。您需要使用格式字符串中的空格或类似%*c
的东西来消耗换行符。 - Adam Rosenfield使用Payload_ID 00 01 02 03 ....10最初发送数据
使用
char *pChar = ""; //用于字符串捕获。
fprintf(fp1, "%s", strtok(pChar, "Payload_ID"));
'\0'
结尾,但是在此之前的最后一个字符通常是'\n'
,因为它会按照文件中出现的样子读取整行。如果没有'\n'
,那么要么是你的缓冲区不够大以容纳整行,要么就是你刚刚读取了文件中的最后几个字符,而它们并没有以换行符结束。 - caf