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

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

#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

Что здесь происходит?

16
задан Keith Thompson 1 November 2011 в 19:06
поделиться