#include <stdio.h>
#include <stdlib.h>
#include <uuid/uuid.h>
int main(void) {
puts("!!!Hello World!!!"); /* prints !!!Hello World!!! */
uuid_t uuid;
int uuid_generate_time_safe(uuid);
printf("%x",uuid);
return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)
我只是想知道为什么uuid不是16字节长?我用DEBUG查看内存,确实不是16字节.我使用libpcap开发我的程序,uuid并不是唯一的.
Kei*_*son 11
我刚刚在我的系统上尝试过你的程序,uuid
长度为 16个字节.但是你的程序没有显示它的大小.
这条线:
int uuid_generate_time_safe(uuid);
Run Code Online (Sandbox Code Playgroud)
不是对uuid_generate_time_safe
函数的调用,它是该函数的声明,uuid
作为单个参数的(忽略)名称.(而且这种功能声明在1999年的标准中甚至没有效率,它取消了旧的"隐含int
"规则.)
你的printf
电话:
printf("%x",uuid);
Run Code Online (Sandbox Code Playgroud)
有不确定的行为; "%x"
需要一个类型的参数unsigned int
.
如果你查看/usr/include/uuid/uuid.h
,你会看到定义uuid_t
是:
typedef unsigned char uuid_t[16];
Run Code Online (Sandbox Code Playgroud)
uuid_generate_time_safe
(见man uuid_generate_time_safe
)的正确声明是:
int uuid_generate_time_safe(uuid_t out);
Run Code Online (Sandbox Code Playgroud)
您不需要在自己的代码中声明该声明; 它是由#include <uuid/uuid.h>
.提供的.因为uuid_t
是数组类型,所以参数实际上是类型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;
}
Run Code Online (Sandbox Code Playgroud)
在我的系统上,我得到以下输出:
sizeof uuid = 16
uuid not generated safely
26 9b fc b8 89 35 11 e1 96 30 00 13 20 db 0a c4
Run Code Online (Sandbox Code Playgroud)
有关可能出现"未安全生成uuid"消息的原因的信息,请参见手册页.
请注意,我必须安装该uuid-dev
软件包才能构建和运行此程序.