奇怪,Linux下的uuid_generate的问题。。
连续两次uuid_generate得到的结果一样?uuid_generate不是为了产生不一样的key的吗?
怎么样才能每次得到的keys唯一?
- C/C++ code
#include <stdio.h> #include <uuid/uuid.h> int save2cache(char* keys) { /*生成uuid*/ uuid_t uu; uuid_generate(uu); memset(keys, 0x00, sizeof(keys)); sprintf(keys, "%x", uu); return 0; } int save2cache2(char* keys) { /*生成uuid*/ uuid_t uu; uuid_generate_random(uu); memset(keys, 0x00, sizeof(keys)); sprintf(keys, "%x", uu); return 0; } int save2cache3(char* keys) { /*生成uuid*/ uuid_t uu; uuid_generate_time(uu); memset(keys, 0x00, sizeof(keys)); sprintf(keys, "%x", uu); return 0; } int main(int argc, char** argv) { char keys[50], keys2[50], keys3[50]; save2cache(keys); printf("keys=%s\n", keys); save2cache(keys); printf("keys=%s\n", keys); printf("/////////////////\n"); save2cache(keys2); printf("keys2=%s\n", keys2); save2cache(keys3); printf("keys3=%s\n", keys3); return 0; }
gcc -o so so.c -luuid
./so
keys=bff40930
keys=bff40930
/////////////////
keys2=bff40930
keys3=bff40930
“memset(keys, 0x00, sizeof(keys))”这种写法是错的,sizeof(keys)得不到字串的长度
“sprintf(keys, "%x", uu)”写法也是错的,这是关键,这样只能将uu前4个字节(一个int类型)打印到keys中