У меня возникли проблемы с печатью члена структуры, возвращаемого из функции:
#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
Что здесь происходит?