関数から返された構造体のメンバーを出力するのに問題があります。
#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
何が起きてる?