sscanf有多个空格?

时间:2010-05-24 15:08:52

标签: c scanf

sscanf(text,“%s%s”,姓名,公司);

解析'ian mceknis'但它也会解析'ian   mceknis'等等。我怎样才能解析第一个呢?它必须只包含一个空格而不是更多。

谢谢。

4 个答案:

答案 0 :(得分:2)

如果您希望它拒绝后一个示例,您必须滚动自己的函数来查找/拒绝多个空格。

但我的猜测是,你真正想做的是剥去多余的空间。请参阅:How do I trim leading/trailing whitespace in a standard way?

答案 1 :(得分:0)

您不能仅使用具有相当基本功能的sscanf()来执行此操作。如果你真的需要强制执行此操作(是吗?),regular expressions可能更合适。

答案 2 :(得分:0)

它不是最干净的,但这就是我为一个项目做的。基本上,不是在格式化字符串中有空格,它最多需要两个空格(您可以将其更改为也处理制表符或其他)。如果只有一个空格,那么第二个char仍为null,如果它不为null,则它被覆盖。

所以我会改变:

sscanf(text, "%s %s", name, company);

为:

char space[2] = "\0\0"
sscanf(text, "%s%2[ ]%s", name, space, company);
if(space[1] != '\0') {
    //there was an extra space, handle it however
}

答案 3 :(得分:-1)

根据sscanf定义,这绝对不可能。为了得到想要的结果,我会手动读取文本变量,搜索两个随之而来的空白字符。如果找到,请将第二个空白字符替换为0,然后调用sscanf。