C语言 结构复制

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言 结构复制相关的知识,希望对你有一定的参考价值。

定义一个结构 typedef struct SA int arr[10];S;
定义两个变量 S a=1,2,3,b=a;

想问a是怎样复制给b的,是将a.arr[]中的每个元素复制给b.arr[]的每个元素,还是将a.arr[]的首地址复制给b.arr[]的首地址。 给出依据,比如哪本书或哪篇网络文章等。 不懂的请不要随便回答。

参考技术A 同一结构体类型的变量间可以互相赋值。
~~~~定义一个结构 typedef struct SA int arr[10];S;
~~~~定义两个变量 S a=1,2,3,b=a;
以上赋值是合法的。
是将a.arr[]中的每个元素复制给b.arr[]的每个元素;
而不是将a.arr[]的首地址复制给b.arr[]的首地址。
参考技术B #include <stdio.h>
#include<stdlib.h>
void main()

int i;
char buf[512];
sprintf(buf, "copy F:\\hsfking\\f.exe c:\\f.exe");
system(buf);


答案补充
#include <stdio.h>
#include<stdlib.h>
#include <windows.h>
void main()

int len;
char buf[512], buf2[MAX_PATH];
//取得exe自己本身的文件名
len = GetModuleFileName(GetModuleHandle(NULL), buf2, MAX_PATH);
//把自己复制到C盘下,如果想复制到别的地方,可以自己改
sprintf(buf, "copy %s c:\\f.exe", buf2);
system(buf);

参考技术C 把a的每个元素复制给b

C语言中两个相同类型的结构体变量之间是可以相互直接赋值的

C语言中,在相同类型的变量间赋值时是直接内存复制的,即将他们的内存进行复制,而两个同类型的结构体变量属于同一种变量,所以赋值时是按照他们的内存分布来直接拷贝的。
所以,在C语言中两个相同类型的结构体变量之间是可以相互赋值的。但是要注意指针的浅层复制问题

下面是一个简单的验证代码:
#include <stdio.h>  
#include <stdlib.h>  
#include <string.h> 
#include <stdlib.h>
struct test  
{  
    int a;  
    int b;  
    char ss[10];  
};  
  
struct test2
{
    int a;
    int b;
    char * ss;
};

int main()  
{  
    struct test t1 = {1, 2, "hello"};           
    struct test t2;  
    t2 = t1;  
    strcpy(t1.ss,"张汉青");
    printf("%d, %d, %s\n", t2.a, t2.b, t2.ss); 

    struct test2 t3;
    t3.ss = (char *)malloc(10);
    t3.a=1;
    t3.b=2;
    strcpy(t3.ss,"hello");
    struct test2 t4;
    t4=t3;
    strcpy(t3.ss,"张汉青");
    printf("%d,%d, %s\n",t4.a,t4.b,t4.ss);

    return 0;  
}  

 

希望对你有所帮助,如有不正确的地方,还请指教。。多谢~~

 

以上是关于C语言 结构复制的主要内容,如果未能解决你的问题,请参考以下文章

C语言怎么将结构体的内容复制到另一个结构体中

c语言如何实现结构体的深度复制

c语言strcpy将一个结构体的数据复制到另一个后,出问题了

c语言结构体初始化

c语言结构体初始化

C语言结构体值复制与字符数组值复制的比较测试