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

我用strcpy将一个结构体的数据复制到另一个结构体,有个疑问是,第一次输入占用空间小的数据程序正常,而第二次输入占用空间大点的数据,程序就出错了,这是怎么回事?难道第一... 我用strcpy将一个结构体的数据复制到另一个结构体,有个疑问是,第一次输入占用空间小的数据程序正常,而第二次输入占用空间大点的数据,程序就出错了,这是怎么回事?难道第一次输入数据后strcpy就将空间确定?下面是部分主要程序:

customer1=(struct cus*)malloc(sizeof(struct cus));
scanf("%s%s%s",customer1->customer_0.name,customer1->customer_0.card,customer1->customer_0.num);
getchar();
system("cls");
head0=air_read();
p0=head0;
while(p0!=NULL)
{
if(strcmp(p0->num,customer1->customer_0.num)==0)
{
strcpy(customer1->air_0.name,p0->name);
strcpy(customer1->air_0.num,p0->num);
strcpy(customer1->air_0.fly,p0->fly);
strcpy(customer1->air_0.aim,p0->aim);
strcpy(customer1->air_0.kind,p0->kind);
strcpy(customer1->air_0.time,p0->time);
strcpy(customer1->air_0.food,p0->food);
customer1->air_0.price=p0->price;
break;
}
p0=p0->next;
}
展开
 我来答
匿名用户
推荐于2018-04-20
展开全部
这属于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++真的是很好很强大。
tattackor
2015-10-30 · TA获得超过3.5万个赞
知道大有可为答主
回答量:5083
采纳率:94%
帮助的人:897万
展开全部
strcpy函数是用于字符串复制的,不能用于结构体的复制。
1、C语言标准库函数strcpy,把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间。直观表示为strcpy(狗,赋值内容)实现对文字变量""狗""的赋值,以区别于普通数字的形式赋值。
2、原型声明:extern char *strcpy(char* dest, const char *src);
头文件:#include <string.h> 和 #include <stdio.h>
功能:把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间
说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。
返回指向dest的指针。"
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友ad273e0
2011-07-19
知道答主
回答量:26
采纳率:0%
帮助的人:12.6万
展开全部
你的struct cus的成员变量是声明为数组还是指针,如果是指针,要另外再对其分配内存。
追问
struct cus
{
struct customer customer_0;
struct air_time air_0;
struct cus *next;
};
不是指针
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
305508676
2011-07-18 · TA获得超过649个赞
知道小有建树答主
回答量:627
采纳率:50%
帮助的人:602万
展开全部
原因是 (sizeof(struct cus)) 中 计算时 字符串是按指针计算的 相当于char*,你应该用 char sz[1024]的方式。明白了?
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
821251400
2011-07-18 · TA获得超过100个赞
知道答主
回答量:106
采纳率:0%
帮助的人:78.9万
展开全部
customer1->air_0.name = (char*)malloc((strlen(p0->name)+1)*sizeof(char))这样重新分配一段内存。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式