使用scanf解析一个没有空格的字符串

时间:2014-03-04 10:04:50

标签: c string scanf

我有一个这样的字符串:

111222abcd12ae

我想将它分成4个数值变量,我想在sscanf的单个代码行中进行分割。 这就是我到目前为止所做的:

sscanf(mystring, "%3d%3d%4x%4x", &v1, &v2, &v3, &v4)

你可以看到

  • v1应存储字符0到2的小数值
  • v2应存储字符3到5的小数值
  • v3应存储字符6到9的六进制值
  • v4应存储字符10到13的六进制值

实际结果:仅设置v4

如何修复格式字符串以获得我想要的内容?

更新

我发现了问题...我已将变量声明为unsigned short而不是int(对于%d)和unsigned int(对于%x )我得到了意想不到的结果。

1 个答案:

答案 0 :(得分:3)

就像你写的一样,它对我来说很好。

这是一个完整的程序:

#include <stdio.h>
#include <stdlib.h>

int main(void) {
    const char *mystring = "111222abcd12ae";
    int v1, v2;
    unsigned int v3, v4;
    const int ret = sscanf(mystring, "%3d%3d%4x%4x", &v1, &v2, &v3, &v4);
    printf("conversion returned %d\n", ret);
    if(ret == 4)
    {
        printf("v1=%d\nv2=%d\nv3=%x\nv4=%x\n", v1, v2, v3, v4);
    }
    return EXIT_SUCCESS;
}

运行它,我得到:

conversion returned 4
v1=111
v2=222
v3=abcd
v4=12ae

您是在某些嵌入式平台上运行此操作吗?因此可能会怀疑sscanf()中的错误/限制?