我刚刚在我的系统上尝试了你的程序,uuid
长度为16 个字节。但是你的程序没有显示它的大小。
该行:
int uuid_generate_time_safe(uuid);
不是对uuid_generate_time_safe
函数的调用,它是该函数的声明,带有uuid
单个参数的(忽略的)名称。(而且这种函数声明在 1999 年标准中甚至无效,该标准放弃了旧的“隐式int
”规则。)
您的printf
电话:
printf("%x",uuid);
有未定义的行为;"%x"
需要类型的参数unsigned int
。
如果您查看/usr/include/uuid/uuid.h
,您会看到 的定义uuid_t
是:
typedef unsigned char uuid_t[16];
uuid_generate_time_safe
(见)的正确声明man uuid_generate_time_safe
是:
int uuid_generate_time_safe(uuid_t out);
您不需要在自己的代码中声明;它由#include <uuid/uuid.h>
. 因为uuid_t
是数组类型,所以参数实际上是 type unsigned char*
,这就是为什么函数似乎能够修改其参数的原因。
这是一个更正确的程序,说明了该函数的使用:
#include <stdio.h>
#include <uuid/uuid.h>
int main(void) {
uuid_t uuid;
int result = uuid_generate_time_safe(uuid);
printf("sizeof uuid = %d\n", (int)sizeof uuid);
// or: printf("sizeof uuid = %zu\n", sizeof uuid);
if (result == 0) {
puts("uuid generated safely");
}
else {
puts("uuid not generated safely");
}
for (size_t i = 0; i < sizeof uuid; i ++) {
printf("%02x ", uuid[i]);
}
putchar('\n');
return 0;
}
在我的系统上,我得到以下输出:
sizeof uuid = 16
uuid not generated safely
26 9b fc b8 89 35 11 e1 96 30 00 13 20 db 0a c4
有关为什么会出现“uuid 未安全生成”消息的信息,请参阅手册页。
请注意,我必须安装该uuid-dev
软件包才能构建和运行该程序。