我在将 const char 数组存储到结构中时遇到问题,然后从结构调用值时,我并不总是获得预期值。
下面是代码:
typedef struct
{
char *update_type;
char *transaction;
} TickType;
在我的线程中:
const char tx_types[] = "INV/ADD/MOD/DEL/RPL";
const char upd_types[] = "INS/OVR/MOV/DEL";
tick->transaction = &tx_types[4*upd.xpbu_transaction_type];
tick->update_type = &upd_types[4*upd.xpbu_update_type];
此upd.xpbu_transaction_type和此upd.xpbu_update_type分别返回整数(0-4)和(0-3)。在另一个线程中,我们打印到文件:
fprintf(out, "%3.3s/%3.3s:\n",tick->transaction, tick->update_type);
fflush(out);
问题是在检查输出文件时我看到以下内容:
+MOD/DEL:
+ / Â +:
+MOD/DEL:
+MOD/ :
/@Ea:
/<90>Ea:
/Ã Ea:
/0Fa:
/ :
正如您所见,它只是有时是正确的。
我确信我的错误在于结构赋值。不幸的是,由于代码是专有软件,我无法更好地了解它。
最佳答案
我怀疑问题出在你放置数组定义的位置。
您应该将它们放在全局地址空间中或将它们声明为静态,以便能够在任务之间共享字符串的地址。
或者按照 BlackBear 建议分配内存并将子字符串复制到其中。
关于c - 如何正确地将 const char 数组分配给结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8183116/