【问题标题】:How to copy member by member in structures [duplicate]如何在结构中按成员复制成员[重复]
【发布时间】:2015-07-02 13:14:04
【问题描述】:

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

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

我在这里阅读了一些关于复制的帖子并使用了作业进行复制,但不知何故它不起作用

非常感谢您的帮助。

【问题讨论】:

    标签: c arrays copy structure


    【解决方案1】:

    一般来说,要将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)

    在您的第一个 sn-p 中,您尝试使用分配复制结构的方式(假设您提供索引)将执行 shallow 复制,这可能不是您想要的。

    【讨论】:

    • @Giorgi 如果你请看我的帖子,我通过制作另一个结构然后将一个结构的内容复制到另一个结构中做了同样的事情。这与您提到的策略相同,但我没有从中得到结果。
    • @learningpal:不一样——仔细看。我会修改我的样本以更符合您的情况;您甚至在第二个示例中混淆了一些索引,例如 ik
    • @Giorgi:非常感谢。它有效.. :)
    • @learningpal:很好,尽管我对您是否正确读取/写入文件有一些疑问,请看这里我的意思,stackoverflow.com/questions/2767623/…
    • @Giorgi:我没有完全理解你的意思。我读了你提到的这篇文章。我在文件读取中使用了结构数组,不明白您有什么疑问?
    【解决方案2】:

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

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

    【讨论】:

    • 在版本1中:其实我没有太多编程经验,所以我想如果我用这些结构变量简单地通过Data2 = Data1进行复制,它会复制第一个结构的所有内容inot其他。版本 2:SNR 是一个错字。
    • 版本 2 也没有声明 i。我假设你想在这里写k
    【解决方案3】:

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

    【讨论】:

    • 非常感谢。我明白你的意思了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-14
    • 2013-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多