объявление памяти с помощью malloc

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);
}
0
задан ant2009 4 April 2012 в 09:21
поделиться