C sscanf 每次都从字符串开始

C sscanf turn begin of string each time

我必须按顺序扫描字符串中的字符,但在那个例子中

char s[8]={"ab"};
char a,b;

sscanf(s,"%c", &a);
sscanf(s,"%c", &b);

printf("%c%c", a, b);

它打印 aa。但我需要它打印 ab。我该如何解决?我应该将字符串打印到文件并从文件中读取吗?

使用

sscanf(s,"%c%c", &a, &b);

您还可以检查 sscanf 的 return 值,以确保它成功地从 s 中提取了两个字符。 sscanf returns 扫描和分配的字符总数,在您的情况下为 2。

另一种方法是使用

a=s[0]; // Assign first character in `s` to `a`
b=s[1]; // Assign second character in `s` to `b`

如果你需要一个字符一个字符地读取每个单词并处理它们,那么更好的方法是使用'\0'检查循环读取带有终止条件的字符串

while ('[=10=]' != *s)
{
    //process each char
    s++
}

发生这种情况是因为 sscanf 在两次调用中都读取了字符串 s 的第一个字符。

就像之前的答案所说的解决方案是使用:

sscanf(s,"%c%c", &a, &b);

在这种情况下sscanf会读取第一个字符并将其赋值给变量a,然后sscanf会继续读取字符串并找到下一个字符。

基本上,每次对字符串调用 sscanf 时,它都会从字符串的开头开始。

希望它能帮助您理解为什么这种行为一点也不奇怪。

它打印 aa 因为这正是您所要求的。

你觉得怎么样:

sscanf(s,"%c", &b);

行为不同于:

sscanf(s,"%c", &a);

如果要扫描字符串的不同部分,则必须将不同的字符串传递给 sscanf

if(1 == sscanf(s,"%c", &a))
    sscanf(s+1,"%c", &b);

但老实说,如果你需要通过 char 解析字符串 char 只需使用指针算法...