我正在尝试编写一个代码来读取文件,将其内容保存在结构数组中,然后尝试在几毫秒的间隔内将这些变量提供给另一个应用程序。我可以从文件中读取数据并将其值存储在“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。
我在这里阅读了一些关于复制的帖子,并使用了复制的分配,但不知怎的,它无法正常工作
非常感谢你的帮助。
答案 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
在适当的地方。对于每个dest
或src
对象(您使用过的),请执行以下操作:free(dest[i].time)
在您的第一个代码段中,您尝试使用分配复制结构的方式(假设您提供索引)将执行shallow副本,这可能不是您想要的。
答案 1 :(得分:0)
版本1:由于Data1
和Data2
不是结构(它们是结构的数组),我认为您的意思是使用Data2[k] = Data1[k]
你的循环。
版本2:这甚至不应该编译(没有SNR
字段)。
答案 2 :(得分:0)
Data2 = Data1将对数组进行浅层复制。它只会使Data2指向Data1而不是你想要的。您需要执行深层复制,索引索引。 C不允许复制数组,但是如果它们在结构中然后执行浅复制则允许它。