如何在结构中逐个复制成员

How to copy member by member in structures

我正在尝试编写一个代码来读取文件,将其内容保存在结构数组中,然后尝试在几毫秒的时间间隔内将这些变量提供给另一个应用程序。我可以从文件中读取数据并将其值存储在 "Filedata" 结构中。现在我试图将这个结构的内容复制到另一个。为此,我想到了两种策略。 1. 在同一结构中声明另一个变量,然后将一个结构复制到另一个结构中。

struct Filedata {
char *time;
int t_diff;
int SN;
}; 
struct Filedata Data1[100];
struct Filedata Data2[100];
/* After reading and storing the content of file in Data1 Variable in main function and continuing in main*/
for (k=0; k<100;k++)
{
Data2 = Data1;
printf("\t%d\n", Data2[k].SN);
Sleep(Data2[k+1].t_diff);
}

2。或者再做一个结构,然后把first上的内容复制到second上。

struct Target
{
char *time;
int SN;
int t_diff;
};

struct Target Data3[100];

for (k=0; k<100;k++)
{
    Data3[k].SN = Data1[i].SN;
    Data3[k+1].t_diff = Data1 [i+1].t_diff;
    printf("\t%d\n", Data3[k].SN);
    Sleep(Data3[k+1].t_diff);
}

我用调试器检查了代码,但它没有将第一个的内容复制到另一个,只是为所有值打印 0。

我在这里 post 阅读了一些关于复制的内容,并使用了复制作业,但不知何故它不起作用

非常感谢您的帮助。

一般来说,要将 src[i] 复制到 dest[i],您需要执行以下操作:

// First, initialize src to some values
src[i].t_diff = 22;
src[i].SN = 33;
src[i].time = malloc(SOMELENGTH);
strcpy(src[i].time, "some text");

// Now, copy src to dest
dest[i].t_diff = src[i].t_diff;
dest[i].SN = src[i].SN;
dest[i].time = malloc(strlen(src[i].time)+1);
strcpy(dest[i].time,src[i].time);

也不要忘记 free 在适当的地方。对于每个 destsrc 对象(您使用的),执行:free(dest[i].time)

在您的第一个片段中,您尝试使用赋值复制结构的方式(假设您提供索引)将进行 shallow 复制,这可能不是您想要的。

版本 1:由于 Data1Data2 不是结构(它们是结构的 数组 ),我认为您的意思是使用 Data2[k] = Data1[k] 在你的循环中。

版本 2:这甚至不应该编译(没有 SNR 字段)。

Data2 = Data1 将对数组进行浅表复制。它只会使 Data2 指向 Data1,这不是您想要的。您需要按索引进行深拷贝。 C 不允许复制数组,但如果它们在结构中则允许复制,但进行浅表复制。