【问题标题】:sscanf string splitting not workingsscanf 字符串拆分不起作用
【发布时间】:2011-12-27 08:20:05
【问题描述】:

有人可以解释一下为什么字符串没有在下面的代码中拆分

#include <stdio.h>

int main(void)
{
    char name[] = "first:last";
    char first[20], last[20];

    sscanf(name, "%s:%s", first, last);

    printf("first: %s, last: %s", first, last);

    return 0;
}

输出是

第一个:第一个:最后一个,最后一个:

但应该是

第一个:第一个,最后一个:最后一个

请在此处检查代码http://ideone.com/JDSTt

【问题讨论】:

  • 如果您测试了来自sscanf() 的返回值,它会告诉您它只进行了一次转换,而不是您预期的两次,这强烈暗示您的期望有问题。始终检查错误...尤其是当您对某事感到困惑时。

标签: c string split scanf


【解决方案1】:

你可以这样使用:

sscanf(name, "%[^:]:%s", first, last);

: 不是空格,因此常规的%s 不会将其视为分隔符。详情请见scanf

(已编辑演示:http://ideone.com/m4LVP

【讨论】:

    【解决方案2】:

    请参阅scanf documentation 关于%s 类型说明符:

    字符串。这将读取后续字符,直到 找到空格(空格字符被认为是空白, 换行符和制表符)。

    【讨论】:

      最近更新 更多