我有一个这样的字符串:
111222abcd12ae
我想将它分成4个数值变量,我想在sscanf
的单个代码行中进行分割。
这就是我到目前为止所做的:
sscanf(mystring, "%3d%3d%4x%4x", &v1, &v2, &v3, &v4)
你可以看到
实际结果:仅设置v4
。
如何修复格式字符串以获得我想要的内容?
更新
我发现了问题...我已将变量声明为unsigned short
而不是int
(对于%d
)和unsigned int
(对于%x
)我得到了意想不到的结果。
答案 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()
中的错误/限制?