使用@作为分隔符的sscanf

时间:2014-08-01 02:59:16

标签: c scanf

在scanf中使用'@'作为分隔符,我没有得到预期的结果。

示例:

#include <stdio.h>
int main()
{
        char buf[512], scan_buf1[512], scan_buf2[512];
        sprintf(buf, "abc@def");
        sscanf(buf, "%s@%s", scan_buf1, scan_buf2);
        printf("Scanned buffer1 - %s scan buffer2 - %s\n", scan_buf1, scan_buf2);
}

Expected op:
Scanned buffer1 - abc scan buffer2 - def

Actual op:
Scanned buffer1 - abc@def scan buffer2 -

我应该为“@”使用一些特殊语法吗?我无法在手册页中看到任何内容。

1 个答案:

答案 0 :(得分:4)

如果您阅读this scanf (and family) reference,您会看到"%s"格式为

  

一系列非空白字符

这意味着"%s"将读取字符,直到它到达空白区域。由于输入中没有空格,因此它将全部读入第一个字符串。

您可以使用"%["格式解决此问题:

sscanf(buf, "%[^@]@%s", scan_buf1, scan_buf2);