gpt4 book ai didi

c - 填充问题? (中/海湾合作委员会)

转载 作者:太空宇宙 更新时间:2023-11-04 05:09:59 24 4
gpt4 key购买 nike

我正在尝试统一 ARM 项目(特别是运行 Linux 2.6.33.3 的 i.MX27 CPU,使用 GCC 4.3.2 编译)的 SQLite 交互方法。作为其中的一部分,我创建了一个带有 union 的结构,该 union 用于保存要绑定(bind)到准备好的语句的值。

#define SQLITE_DATA_CHARACTER_STRING_MAX 1024

typedef struct
{
int data_type;
union
{
int integer;
double floating_point;
unsigned char character_string[SQLITE_DATA_CHARACTER_STRING_MAX];
};
}sqlite_data;

最初,这是intfloatchar。我想使用 long longdoublechar。但是,这似乎会导致问题。如上所示,以下代码产生可预测的输出:

int data_fields = 15;
int data_fields_index = 0;
sqlite_data data[data_fields];

LogMsg(LOG_INFO, "%s: Assigning", __FUNCTION__);

for(data_fields_index = 0; data_fields_index < data_fields; data_fields_index++)
{
data[data_fields_index].data_type = (100 + data_fields_index);
data[data_fields_index].integer = (1000 + data_fields_index);
LogMsg(LOG_INFO, "%s: data[%d] - %d; type - %d", __FUNCTION__, data_fields_index, data[data_fields_index].integer, data[data_fields_index].data_type);
}

输出是这样的:

 Assigning
data[0] - 1000; type - 100
data[1] - 1001; type - 101
data[2] - 1002; type - 102
data[3] - 1003; type - 103
data[4] - 1004; type - 104
data[5] - 1005; type - 105
data[6] - 1006; type - 106
data[7] - 1007; type - 107
data[8] - 1008; type - 108
data[9] - 1009; type - 109
data[10] - 1010; type - 110
data[11] - 1011; type - 111
data[12] - 1012; type - 112
data[13] - 1013; type - 113
data[14] - 1014; type - 114

但是,如果我只做一个改变(给 integer 类型 long long),它就会崩溃。因此,进行以下更改:

typedef struct
{
int data_type;
union
{
long long integer;
double floating_point;
unsigned char character_string[SQLITE_DATA_CHARACTER_STRING_MAX];
};
}sqlite_data;

产生这个输出:

Assigning
data[0] - 1000; type - 0
data[1] - 1001; type - 0
data[2] - 1002; type - 0
data[3] - 1003; type - 0
data[4] - 1004; type - 0
data[5] - 1005; type - 0
data[6] - 1006; type - 0
data[7] - 1007; type - 0
data[8] - 1008; type - 0
data[9] - 1009; type - 0
data[10] - 1010; type - 0
data[11] - 1011; type - 0
data[12] - 1012; type - 0
data[13] - 1013; type - 0
data[14] - 1014; type - 0

我已经尝试使用 #pragma pack(6) 将它们去 ionic 化,并将该数组放在堆上,所有结果都相同:int 有效,long long 没有。

这是怎么回事?

最佳答案

您没有告诉 printf() 期待一个 long long。在格式字符串中使用 %lld 而不是 %d

关于c - 填充问题? (中/海湾合作委员会),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20845800/

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