【发布时间】:2021-12-28 17:17:42
【问题描述】:
我有这个程序应该读取一行,例如post "nice job" john,我想获取该行中的每个令牌,但由于某种原因,我只得到其中一些。
预期输出:
post
nice job
john
我的输出:
post
nice
我确定我在 sscanf 上设置了正确的格式,所以我不明白为什么它不会将“好工作”视为一个词。
程序:
#include <stdio.h>
int main()
{
char token1[128];
char token2[128];
char token3[128];
char str[] = "post \"nice job\" john";
sscanf(str,"%s \"%s\" %s",token1,token2,token3);
puts(token1);
puts(token2);
puts(token3);
return(0);
}
【问题讨论】:
-
如果您尝试
sscanf(str,"%s %s %s",token1,token2,token3);会怎样? -
第二个
%s不会读取"nice job",而是在第一个空格字符处停止,因此它只会读取"nice"。使用%[]格式或fgets()和strtok()会更容易。 -
为什么这被标记为 C++?这是 C 代码,除了
new(已泄露)。在 C++ 中,这很容易,您可以使用std::quoted、std::string和一大堆更好的方法。我不认为应该挽救这个sscanf代码。 -
我尝试使用
sscanf(str,"%s %s %s",token1,token2,token3);,但就像我说的我不想要“好工作”,我只想要这个短语 -
我不明白的是为什么当我以单词有“”的格式说时,这是在第一个空白处