gpt4 book ai didi

c - 将所有数据从数组复制到结构后指针错误

转载 作者:行者123 更新时间:2023-12-02 04:46:26 24 4
gpt4 key购买 nike

当我运行下面的代码时

#include <stdio.h>

typedef unsigned char uint8_t;
typedef unsigned short int uint16_t;

const uint8_t Symbols[] = {
0xCA,0x04,// size
0x0B, // width
0x0B, // height
0x00, // first char
0x04, // char count
0x01, 0x02, 0x03, 0x04,// char widths
// font data
0x00, 0x00, 0x20, 0x00, 0xF0, 0x07, 0x08, 0x04, 0x84, 0x07, 0x84, 0x07, 0x84, 0x07, 0x0E, 0x04, 0xF0, 0x07, 0x20, 0x00, 0x00, 0x00, // 0
0x10, 0x01, 0x08, 0x01, 0x04, 0x01, 0x04, 0x01, 0x08, 0x01, 0x10, 0x01, 0x10, 0x01, 0x08, 0x01, 0x04, 0x01, 0x04, 0x01, 0x00, 0x00, // 1
0x18, 0x00, 0xFF, 0x07, 0x18, 0x00, 0x00, 0x00, 0x80, 0x01, 0xFF, 0x07, 0x80, 0x01, 0x00, 0x00, 0x0C, 0x00, 0xFF, 0x07, 0x0C, 0x00, // 2
0x00, 0x02, 0x80, 0x05, 0x60, 0x04, 0x18, 0x04, 0x04, 0x04, 0x72, 0x05, 0x04, 0x04, 0x18, 0x04, 0x60, 0x04, 0x80, 0x05, 0x00, 0x02 // 3


};

typedef struct
{
uint16_t size; //2
uint8_t width; //1
uint8_t height; //1
uint8_t first_char; //1
uint8_t char_count; //1
uint8_t *font_widths;
uint8_t *font_data;
} _graphics_font;

_graphics_font* test;
uint8_t* font_st;
uint8_t temp;

int main(void)
{
test = (_graphics_font*)&Symbols;
font_st = (uint8_t*)&test->font_widths;
temp = font_st[0]+font_st[1]+font_st[2]+font_st[3]; //1+2+3+4 = 10
printf("temp=%d",temp);
return 0;
}

在 C 中,我期望指针 font_st 将恰好指向 Symbols 数组的第 6 个字节之后。因此,打印的结果应该是 10。 而不是将指针分配给第 9 个字节,每次丢失 2 个字节,结果错误地打印了 7。为什么会这样?

重要的更新是使用以下行:

temp = font_st[-2]+font_st[-1]+font_st[0]+font_st[1]; //1+2+3+4 = 10

有效。

最佳答案

此行为很可能是由 struct padding 引起的.

尝试以下操作:

#include <stdio.h>

#pragma pack(push, 1)

.... (all other code)

#pragma pack(pop)

关于c - 将所有数据从数组复制到结构后指针错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32563289/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com