我在打印从函数返回的结构成员时遇到问题:
#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
这里发生了什么?