c语言结构体拷贝
⑴ c语言中结构体可以通过=号直接复制吗
标准的C语言是不可以的,但是如果你的文件的扩展名是.cpp
这就没问题了。
⑵ C语言 结构体的定义及使用
额·你的初始化有错误~~
yinkailin.Name[] = "yinkailin";这样初始化是不行滴~
加头文件#include <string.h>
然后这样初始化~
strcpy(yinkailin.name, "yinkailin");
⑶ c语言如何实现结构体的深度复制
使用memcpy即可, 比如你另外建立一个结构体sortbook[1000]用来保存排序结果,将book中的第i个元素赋值到sortbook的第j个元素中
memcpy(&sortbook[j], &book[i], sizeof(struct book));
用这个函数需要#include <string.h>
函数原型
void *memcpy(void*dest, const void *src, size_t n);
功能
由src指向地址为起始地址的连续n个字节的数据复制到以destin指向地址为起始地址的空间内。
头文件
#include<string.h>
返回值
函数返回一个指向dest的指针。
说明
1.source和destin所指内存区域不能重叠,函数返回指向destin的指针。
2.与strcpy相比,memcpy并不是遇到'\0'就结束,而是一定会拷贝完n个字节。
memcpy用来做内存拷贝,你可以拿它拷贝任何数据类型的对象,可以指定拷贝的数据长度;
例:
char a[100], b[50];
memcpy(b, a,sizeof(b)); //注意如用sizeof(a),会造成b的内存地址溢出。
strcpy就只能拷贝字符串了,它遇到'\0'就结束拷贝;例:
char a[100], b[50];
strcpy(a,b);
3.如果目标数组destin本身已有数据,执行memcpy()后,将覆盖原有数据(最多覆盖n)。如果要追加数据,则每次执行memcpy后,要将目标数组地址增加到你要追加数据的地址。
//注意,source和destin都不一定是数组,任意的可读写的空间均可。
⑷ C语言怎么将结构体的内容复制到另一个结构体中
C并不支持结构体变量的直接赋值,
一般采用memcpy(&a,&b,sizeof(a))的方式
⑸ c语言strcpy将一个结构体的数据复制到另一个后,出问题了
这属于C++的范畴,虽然我C++学得也是半斤八两,但是这段代码我还是基本上过得去。
我假设你是有一定的C编程基础,所以就只回答你空间描述的不懂的地方了,每句都翻译枯燥而且也会感觉不知所云。还有什么不懂的,欢迎提问,我有足够的耐性和信心让你搞明白,呵呵^!^
C++中主要是比C多了面向对象的概念。
#include <*****> 表示的是将*****头文件包含进来
#include "*****" 功能一样,只是他们索引文件的方式不一样,初学者不必深究。
*****头文件里面定义了常用的一些预处理,结构体,类等等,可以方便大家直接使用不再定义他们。你可以搜索*****找到它打开看看里面的内容,不要随意修改他们哦,否则你以后写程序要出问题的哟,呵呵。
using namespace std;
表示要用到的一些关键字所在的命名空间
因为用到了cout所以必须加上这句话。
定义了一个Student类,定义类的时候除了可以定义一些变量,还可以定义一些接口,变量和接口都可以用private,public,protected来定义访问 以及 继承权限的。
其实接口更直接一点就是一个函数,或者说成指向函数的指针变量也可以,主要看你怎么理解了。
int student::jud() ::表示域限定符,用::定义了一个接口(也就是函数),表示这个函数是属于student类的。
同时student类中还定义了一个student()函数,是构造函数,语法规定必须和类名字相同。构造函数的主要作用是类实例化的时候初始化变量,也就是在创建对象的要用到的。
loop: printf("****");
loop:表示的是一个标号,后面用goto loop 跳转到loop:位置执行printf("****");
你完全可以把loop替换成别的东西,比如xunhuan,呵呵
cout 用来控制输出
<<连接各个参数,
cint 用来控制输入
>>连接各个参数。参数和printf ,scanf 是相一致的。
system("***"); 可以调用一些命令行,如cls 清屏 ,pause 暂停 还可以创建进程等等。
好像差不多没了,其他东西基本都是C语言知识了
PS:
其实C++的类和C语言的结构体非常相似,类可以定义函数接口,但是结构体不行
其实我们在结构体中也可以变相的实现定义函数的嘛,比如定义一个函数指针变量。
唯一不同的就是C++的类多了继承的概念,一个类可以继承另一个类的一些属性
而且在继承的过程中还有private,public,protected等权限。
当然C++除了类之外还有STL等一些比较高级的东东值得学习,巧妙的使用他们可以加快项目进度,提升项目效率,C++真的是很好很强大。
⑹ C语言如何深拷贝结构体
结构体并非一个赋值号就能的,需要手动设计自己将其中的每个基础类型进行复制:
struct a a1,a2;
strcpy(a1.str,"123456789"); strcpy(a2.str,a1.str); strcpy(a1.str,"111111111");
在中间那句执行时,a1.str的内容是"123456789",因此赋值给a2.str的也是这个字符串
赋值完成后再改变a1时,a2与此无关了,会保持最后一次操作赋值的结果。
⑺ C语言中,将多个结构体数据写到一个文件中,应该如何读取
C语言把一个结构体数组写入文件分三步:
1、以二进制写方式(wb)打开文件
2、调用写入函数fwrite()将结构体数据写入文件
3、关闭文件指针
相应的,读文件也要与之匹配:
1、以二进制读方式(rb)打开文件
2、调用读文件函数fread()读取文件中的数据到结构体变量
3、关闭文件指针
参考代码如下:
#include<stdio.h>
structstu{
charname[30];
intage;
doublescore;
};
intread_file();
intwrite_file();
intmain()
{
if(write_file()<0)//将结构体数据写入文件
return-1;
read_file();//读文件,并显示数据
return0;
}
intwrite_file()
{
FILE*fp=NULL;
structstustudent={"zhangsan",18,99.5};
fp=fopen("stu.dat","wb");//b表示以二进制方式打开文件
if(fp==NULL)//打开文件失败,返回错误信息
{
printf("openfileforwriteerror ");
return-1;
}
fwrite(&student,sizeof(structstu),1,fp);//向文件中写入数据
fclose(fp);//关闭文件
return0;
}
intread_file()
{
FILE*fp=NULL;
structstustudent;
fp=fopen("stu.dat","rb");//b表示以二进制方式打开文件
if(fp==NULL)//打开文件失败,返回错误信息
{
printf("openfileforreaderror ");
return-1;
}
fread(&student,sizeof(structstu),1,fp);//读文件中数据到结构体
printf("name="%s"age=%dscore=%.2lf ",student.name,student.age,student.score);//显示结构体中的数据
fclose(fp);//关闭文件
return0;
}