c++ - 使用 sscanf 将字符串转换为 GUID

标签 c++ c guid scanf

<分区>

我正在尝试使用 sscanf 将字符串转换为 GUID:

GUID guid;
sscanf( "11111111-2222-3333-4455-667788995511", "%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x",
        &guid.Data1, &guid.Data2, &guid.Data3,
        &guid.Data4[0], &guid.Data4[1], &guid.Data4[2],
        &guid.Data4[3], &guid.Data4[4], &guid.Data4[5],
        &guid.Data4[6], &guid.Data4[7]);

但是,在运行时,它会失败并退出并显示“错误:命令失败”。为什么?如何解决?

我不想用/clr 编译,所以不能使用 System

最佳答案

我认为你正在破坏堆栈。 X 类型说明符需要指向至少 4 个字节的 int 的指针,因此从 &guid.Data[4] 参数开始你就搞砸了。为 sscanf 提供足够的空间,你应该没问题。最终代码如下所示:

    GUID guid;

    unsigned long p0;
    int p1, p2, p3, p4, p5, p6, p7, p8, p9, p10;

    int err = sscanf_s(s.c_str(), "%08lX-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X",
        &p0, &p1, &p2, &p3, &p4, &p5, &p6, &p7, &p8, &p9, &p10);

    guid.Data1 = p0;
    guid.Data2 = p1;
    guid.Data3 = p2;
    guid.Data4[0] = p3;
    guid.Data4[1] = p4;
    guid.Data4[2] = p5;
    guid.Data4[3] = p6;
    guid.Data4[4] = p7;
    guid.Data4[5] = p8;
    guid.Data4[6] = p9;
    guid.Data4[7] = p10;

关于c++ - 使用 sscanf 将字符串转换为 GUID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2824451/

相关文章:

c++ - 为什么并行读取数组会导致内存泄漏?

c++ - 循环 C++ header 包括

c - 汉明码 (255 247) 可以检测和纠正多少位?

sql - 将 guids 转换为数值

c++ - 如何在 Windows 上使用 cproto

c++ - 如何在 Win7 中的渲染过滤器中获取打印机属性值?

c - 如何在嵌入式C中生成UUID

windows - 什么是 USB 设备 GUID 及其含义

c - 同时指定 O_APPEND 和 O_TRUNC 时,它不会截断吗?

if(flag) 和 if(flag !=0) 之间的编译时性能差异?