我正在尝试读取返回分隔文件。充满了短语。
我正在尝试将每个短语放入一个字符串中。
问题是当我尝试用
读取文件时fscanf(file,"%50s\n",string);
字符串只包含一个单词。当它与空格碰撞时,它会停止读取字符串
答案 0 :(得分:5)
fscanf(file,"%50[^\n]\n",string);
除\n
以外的所有字符都将被[^\n]
消费
最多会消耗50个字符(确保字符串至少有51个空格)
..
\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 ="" ; //用于字符串捕获。
fprintf(fp1,"%s",strtok(pChar," Payload_ID"));