gcc (GCC) 4.6.3
c89
apache runtime portable libraries
Здравствуйте,
Простой вопрос, я думаю, я пытаюсь создать значение uuid.
Я хочу, чтобы функция, которая создает его, была автономной (черный ящик), чтобы я мог просто передать буфер, а функция сделает все остальное.
Это означает, что я должен объявить память в куче в этой функции, так как вызывающая функция не знает многого для объявления. Я знаю, что это плохая идея, так как callie должен будет освободить память после того, как он закончит с ней.
Можно ли сделать это лучше?
Когда я запускаю это, branch_id_buf всегда равен нулю после возврата из функции. Однако я передал его функции, поэтому он не должен быть нулевым, когда функция возвращается, поскольку он должен указывать на некоторую выделенную память.
Большое спасибо за любой совет,
static void g_get_branch_id(char *branch_id_buf);
int main(void)
{
char *branch_id_buf = NULL;
g_get_branch_id(branch_id_buf);
printf("branch id [ %s ]\n", branch_id_buf);
free(branch_id_buf);
return 0;
}
static void g_get_branch_id(char *branch_id_buf)
{
apr_uuid_t uuid;
#define MAGIC_COOKIE_LENGTH 9
const char *MAGIC_COOKIE = "z9hG4bk-";
const int BRANCH_ID_LENGTH = APR_UUID_FORMATTED_LENGTH + MAGIC_COOKIE_LENGTH;
branch_id_buf = malloc(BRANCH_ID_LENGTH);
if(branch_id_buf == NULL) {
return;
}
strncpy(branch_id_buf, MAGIC_COOKIE, BRANCH_ID_LENGTH);
printf("branch id [ %s ]\n", branch_id_buf);
apr_uuid_get(&uuid);
#define PREFIX_BRANCH_LENGTH 8
apr_uuid_format(branch_id_buf + PREFIX_BRANCH_LENGTH, &uuid);
printf("branch id [ %s ]\n", branch_id_buf);
}