【发布时间】:2022-01-15 07:52:38
【问题描述】:
下面是结构示例的代码。当我一直为不同的人添加多个信息时,它显示的输出与最后插入的信息相同。我该如何解决?
#include<stdio.h>
#include<string.h>
struct Person{
char *name;
char *adress;
}p[100];
void insert(int ind , char *name, char *adress){
p[ind].name = name;
p[ind].adress = adress;
}
void display(int n){`enter code here`
for(int i =0 ; i<n ; ++i){
printf("%s %s\n" , p[i].name , p[i].adress);
}
}
int main(){
char name[100] , address[100];
for(int i = 0 ; i<2 ; ++i){
fflush(stdin);
gets(name);
fflush(stdin);
gets(address);
insert(i , name , address);
}
display(2);
return 0;
}
【问题讨论】:
-
您永远不会复制
insert中的姓名和地址;您只需将指针元素指向两个数组。这两个数组将始终采用您输入的最后一个值,因此所有结构元素始终显示最后两个值。 -
要进行复制,您可以使用
strdup:p[ind].adress = strdup(adress);等函数。只需确保检查strdup的返回值不是NULL。 -
为了显示所有信息我应该怎么做?
-
您的代码还有其他问题,因为它会在名称和地址超过 100 个字符(是的,世界上存在)时失败(或导致严重问题)。我认为
gets也不推荐;fgets(和stdin)会更好。