Closed. This question is off-topic. It is not currently accepting answers. Learn more
想改进这个问题吗?Update the question所以堆栈溢出的值小于aa>。
去年关门了。
很抱歉试图用另一种方式问这个问题。
typedef   struct
 {
    char duo_word[8];
 } duo_word;


  duo_word duo_word_inst = { .duo_word = { 'º', '\b', '\x1', '\0', 'À', '\xe', '2', 'a' } };

  printf("          %i ", duo_word_inst); // gives 67770 but how?

如何将67770值提取到一个int变量中?

最佳答案

%i格式说明符toprintf需要一个int作为其参数。但是,您要传递一个duo_word。使用错误的格式说明符调用undefined behavior。在这种情况下,你是“幸运的”它碰巧打印你想要的,但你不能依赖于这种行为。
假设结构中的前4个字节以小尾数格式表示32位整数,则可以提取单个字节并将其设置为整数,如下所示:

unsigned int value = 0;
value |= (unsigned char)duo_word_inst.duo_word[0];
value |= (unsigned char)duo_word_inst.duo_word[1] << 8;
value |= (unsigned char)duo_word_inst.duo_word[2] << 16;
value |= (unsigned char)duo_word_inst.duo_word[3] << 24;

关于c - 在这种情况下,printf%i如何工作? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50822142/

10-11 20:46