我有一个功能
void add_car(char *car) {
park.buffer[park.size] = car;
park.size ++;
}
汽车是一个像“XYZ”的字符串。 Atm,它似乎将carpark缓冲区数组元素分配给一个地址。因此,如果我用10辆汽车填充阵列,我会收回10辆汽车,但每辆都是最新的汽车,因为汽车的地址被覆盖了。如何在carpark.buffer中填写汽车的实际价值。
总思维空间atm
答案 0 :(得分:3)
假设park.buffer
是char*
的数组,您可能需要使用
park.buffer[park.size] = strdup(car);
请注意,这不可避免地会产生副本(如果您不希望对car
进行进一步更改以影响park.buffer
,则必不可少!)拥有< / em> park
(意思是,完成后,您必须free
从那里开始,因为strdup隐含地执行malloc
[和{{1}当然也是; - )])。
顺便说一句,您需要在文件顶部strcpy
(如果您还没有这样做)才能使用#include <string.h>
。
答案 1 :(得分:2)
要复制C中的“字符串”,您需要使用strcpy
并且您不想将其复制到park.buffer的末尾,您可能希望将其复制到第0位。
答案 2 :(得分:1)
如果没有更多的背景,很难准确地说出你在做什么。但我认为park.buffer是一个指针数组。
因为汽车的地址被覆盖了
汽车的地址不会被覆盖。
此外,您应该非常小心如何使用add_car
功能。如果你继续调用它,你可能会覆盖不属于你的内存。此外,您还要小心,因为您捕获其地址,所以传入此函数的内容不会被释放。
你是正确的=设置字符串的地址,而不是复制整个字符串。