我剛剛在我的系統上試過你的程序,並且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
是一個數組類型,所以該參數確實是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
包才能構建和運行此程序。
你如何確定它不是16字節長?如果你檢查sizeof(uuid)'會發生什麼?你爲什麼不使用['uuid_parse()'](http://linux.die.net/man/3/uuid_parse)? – 2012-04-18 08:45:54
我會告訴你什麼不是16個字節長。與'%x'相對應的參數。 – asveikau 2012-04-18 08:47:05
@OliCharlesworth uuid_t = char [16],它在uuid頭文件中定義。 – user1111073 2012-04-18 08:49:30