在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 -
我应该为“@”使用一些特殊语法吗?我无法在手册页中看到任何内容。
答案 0 :(得分:4)
如果您阅读this scanf
(and family) reference,您会看到"%s"
格式为
一系列非空白字符
这意味着"%s"
将读取字符,直到它到达空白区域。由于输入中没有空格,因此它将全部读入第一个字符串。
您可以使用"%["
格式解决此问题:
sscanf(buf, "%[^@]@%s", scan_buf1, scan_buf2);