如何在成员

时间:2015-07-02 13:14:05

标签: c arrays copy structure

我正在尝试编写一个代码来读取文件,将其内容保存在结构数组中,然后尝试在几毫秒的间隔内将这些变量提供给另一个应用程序。我可以从文件中读取数据并将其值存储在“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。或者制作另一个结构,然后将内容首先复制到第二个。

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。

我在这里阅读了一些关于复制的帖子,并使用了复制的分配,但不知怎的,它无法正常工作

非常感谢你的帮助。

3 个答案:

答案 0 :(得分:0)

通常,要将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 :(得分:0)

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

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

答案 2 :(得分:0)

Data2 = Data1将对数组进行浅层复制。它只会使Data2指向Data1而不是你想要的。您需要执行深层复制,索引索引。 C不允许复制数组,但是如果它们在结构中然后执行浅复制则允许它。