방금 시스템에서 프로그램을 시도한 결과 uuid
은 16 바이트입니다. 그러나 프로그램 크기가 표시되지 않습니다.
라인 :
int uuid_generate_time_safe(uuid);
는 uuid_generate_time_safe
함수를 호출하지, 그것은 하나의 매개 변수 (무시) 이름으로 uuid
와 그 함수의 선언입니다. (그리고 함수 선언의 종류는 기존의 "암시 int
"규칙을 떨어 1999 년 기준, 현재도 유효하지 않습니다.)
귀하의 printf
전화 :
printf("%x",uuid);
보증되지 행동; "%x"
에는 unsigned int
유형의 인수가 필요합니다.
typedef unsigned char uuid_t[16];
uuid_generate_time_safe
의 올바른 선언 (man uuid_generate_time_safe
참조) 일 :
int uuid_generate_time_safe(uuid_t out);
당신은하지 않습니다 당신이 /usr/include/uuid/uuid.h
를 보면
, 당신은 uuid_t
의 정의는 것을 볼 수 있습니다 자신의 코드에서 그 선언이 필요합니다. 그것은 #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 not generated 안전하게"메시지가 나타날 수 있습니다.
이 프로그램을 빌드하고 실행할 수 있으려면 uuid-dev
패키지를 설치해야합니다.
어떻게 16 바이트 길이가 아니라고 결정합니까? 'sizeof (uuid)'를 검사하면 어떻게됩니까? 왜 ['uuid_parse()'] (http://linux.die.net/man/3/uuid_parse)를 사용하지 않습니까? –
16 바이트 길이가 아닌 것을 알려 드리겠습니다. '% x'에 해당하는 인수. – asveikau
@OliCharlesworth uuid_t = char [16], uuid 헤더 파일에 정의되어 있습니다. – user1111073