0

首先,如果已经提出并解决了这个问题,我真的很抱歉 - 我花了很长时间搜索并尝试修改代码示例以提供我需要的东西......但遗憾的是无济于事。本质上,我只是想将一个结构的内容复制到另一个结构(在其他地方有记录,但我无法让它工作)。

扫描仪在读取条形码时填充以下结构:

struct barcode
{
    char *text;
    int length;
    int id;
    int min;
    int max;
};

这被实例化为:

static struct barcode code = {0};

我实例化另一个相同类型的:

struct barcode *barcodeHolder;

这旨在存储扫描条形码的副本。这是因为随后将扫描指示其他步骤的其他代码,例如条形码以指示数字或阶段(例如,结束、开始等)。一旦我想将结构内容写入磁盘,我就会使用结构的“副本”,因为这就是我想要的。

但是,char *text 属性始终等于 'c' 而不是条形码的值。

我将它们复制如下:

barcodeHolder = malloc(sizeof(code));
barcodeHolder->text = malloc(strlen(code->text) + 1);
strcpy(barcodeHolder->text, code->text);
barcodeHolder->id   = code->id;
barcodeHolder->length = code->length;
barcodeHolder->max = code->max;
barcodeHolder->min = code->min;

这是我从其他类似主题的帖子中得到的。

但是,我显然在做一些愚蠢的错误,并且欢迎任何人可能提供的任何帮助,以便我的 struct text 元素副本确实得到正确的复制值。

谢谢!

4

4 回答 4

3

code不是指针

你需要这个:

barcodeHolder = malloc(sizeof(code));
barcodeHolder->text = malloc(strlen(code.text) + 1);
strcpy(barcodeHolder->text, code.text);
barcodeHolder->id = code.id;
barcodeHolder->length = code.length;
barcodeHolder->max = code.max;
barcodeHolder->min = code.min;
于 2013-09-19T15:38:09.430 回答
1

我不相信你的代码真的是:

static struct barcode code = {0};
[..]
strcpy(barcodeHolder->text, code->text);

因为最后一条语句会产生编译错误 - 因为code不是您必须使用的指针code.text那里使用的指针(而不是code->text)。

假设您实际上正在使用类似的东西

struct barcode *code = ...;

您正在使用上面的代码 sizeof 指针进行分配struct code字节指针进行分配,这对于您的结构来说是不够的。

因此,像这样复制它:

barcodeHolder = malloc(sizeof(struct barcode));
// alternative: ... = malloc(sizeof(*code));

*barcodeHolder = *code;
barcodeHolder->text = malloc(strlen(code->text) + 1);
strcpy(barcodeHolder->text, code->text);
于 2013-09-19T15:45:39.960 回答
0

或者,更简单地说:

barcodeHolder = malloc(sizeof(code));
*barcodeHolder = code;
barcodeHolder->text = strdup(code.text);
于 2013-09-19T15:44:14.623 回答
0

可能不相关,但如果您的示例中的代码是指向结构的指针,那么您的 sizeof 是错误的。它应该是 sizeof(*code) 或 sizeof(struct 条形码)。– 肖恩·布莱特 21 小时前

@SeanBright 我绝不会称自己为 C 程序员——永远!- 所以你完全保存在这里!谢谢你。不,“代码”不是程序中的指针,这也让我感到困惑......这可能是我无法到达任何地方的原因。我只需要让它工作来证明我们可以做一个演示。如果它取得进展,我会回来(希望如此!)并重新访问代码以更好地理解它为什么在它可能不应该工作的情况下工作。再次感谢你!!!

于 2013-09-20T15:59:14.913 回答