あなたのプログラムを自分のシステムで試してみたところ、長さuuid
は16 バイトです。しかし、あなたのプログラムはそのサイズを表示しません。
この線:
int uuid_generate_time_safe(uuid);
uuid_generate_time_safe
は関数の呼び出しではなく、単一のパラメーターの (無視された) 名前としてのその関数の宣言です。(そして、その種の関数宣言は、古い「暗黙の」ルールuuid
を削除した 1999 年の標準の時点でも有効ではありません。)int
あなたのprintf
電話:
printf("%x",uuid);
未定義の動作があります。"%x"
type の引数が必要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
は配列型であるため、パラメーターは実際には typeunsigned 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 が安全に生成されていません」というメッセージが表示される理由については、man ページを参照してください。
uuid-dev
このプログラムをビルドして実行するには、パッケージをインストールする必要があることに注意してください。