печать члена возвращаемой структуры

У меня проблемы с печатью члена структуры, которая возвращается из функции:

#include <stdio.h>

struct hex_string
{
    char a[9];
};

struct hex_string to_hex_string_(unsigned x)
{
    static const char hex_digits[] = "0123456789ABCDEF";
    struct hex_string result;
    char * p = result.a;
    int i;
    for (i = 28; i >= 0; i -= 4)
    {
        *p++ = hex_digits[(x >> i) & 15];
    }
    *p = 0;
    printf("%s\n", result.a);   /* works */
    return result;
}

void test_hex(void)
{
    printf("%s\n", to_hex_string_(12345).a);   /* crashes */
}

printf позвони внутрьto_hex_string_ печатает правильный результат, ноprintf позвони внутрьtest_hex вылетает моя программа. Почему именно это? Это проблема на всю жизнь, или это что-то еще?

Когда я заменяюprintf позвонить сputs(to_hex_string_(12345).a)Я получаю ошибку компилятора:

invalid use of non-lvalue array

Что тут происходит?

Ответы на вопрос(3)

Ваш ответ на вопрос