gcc (GCC) 4.6.3
c89
apache runtime portable libraries
こんにちは、
簡単な質問ですが、uuid値を作成しようとしています。
スタンドアロン(ブラックボックス)にする関数が欲しいので、バッファーを渡すだけで、残りは関数が実行します。
つまり、呼び出し元の関数は宣言する内容をあまり知らないため、その関数のヒープでメモリを宣言する必要があります。私はこれが悪い考えであることを知っています。なぜなら、呼び出し側はそれが終わった後にメモリを解放しなければならないからです。
これをもっとうまくやれる方法はありますか?
これを実行すると、関数が戻った後、branch_id_bufは常にnullになります。ただし、これを関数に渡したので、割り当てられたメモリを指している必要があるため、関数が戻ったときにnullにならないようにする必要があります。
アドバイスをありがとう、
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);
}