首先,我真的很抱歉,如果已经被要求和解决了 - 我花了很长时间搜索并尝试调整代码示例给我我需要的东西......但遗憾的是无济于事。基本上我只是试图将一个结构的内容复制到另一个结构(这里有其他文档记录,但我不能让它工作)。
扫描程序在读取条形码时会填充以下结构:
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元素副本确实能够复制正确的值。
谢谢!
答案 0 :(得分: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;
答案 1 :(得分: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);
答案 2 :(得分:0)
或者更简单:
barcodeHolder = malloc(sizeof(code));
*barcodeHolder = code;
barcodeHolder->text = strdup(code.text);
答案 3 :(得分:0)
可能不相关,但如果您的示例中的代码是指向结构的指针,那么您的sizeof是错误的。它应该是sizeof(* code)或sizeof(struct barcode)。 - Sean Bright 21小时前
@SeanBright我永远不会称自己为C程序员 - 永远! - 所以你完全保存在这里!谢谢。不,“代码”不是程序中的指针,也让我很困惑......而且可能是我无法到达的原因。我只需要让它工作来证明我们可以做一个演示。如果它进展,我会回来(希望!)并重新访问代码,以便更好地理解为什么它可能不应该工作。再次感谢你!!!