我正在尝试更改struct对象中的变量。但每次我改变它,其他对象也会改变。
这是我的结构
struct room{
char * S;
char * N;
char * W;
char * E;
char South;
char North;
char West;
char East;
char * Name;
};
这是块我在main方法中运行
int numOfRooms=0;
struct room * rooms;
rooms=(struct room*)malloc(sizeof(*rooms));
do{
rooms=(struct room*)realloc(rooms,sizeof(*rooms)*(numOfRooms+1));
fscanf(fp,"%s%c",name,&temp);
printf("%s ",name);
printf("%d",numOfRooms);
rooms[numOfRooms].Name=name;
printf("%s ",rooms[0].Name);
numOfRooms++;
}while(temp!='\n');
输出为:START 0START FOYER 1FOYER ELEVATOR 2ELEVATOR
应该是:START 0START FOYER 1START ELEVATOR 2START
这是我的问题。每当我尝试在我的结构中更改Name
时,之前的名称也会发生变化。
名称已声明
char string[20];
char defa[16]="No Path This Way";
char temp;
char * input;
char * name=string;
答案 0 :(得分:2)
执行此操作时:
rooms[numOfRooms].Name=name;
您Name
指向name
指向的同一事物。复制值不。这意味着您的所有room
个实例的Name
成员都指向同一位置。
您应该使用strdup
从用于读取用户输入的字符串创建新的动态分配字符串:
rooms[numOfRooms].Name=strdup(name);
请务必在完成此字段后致电free
。
答案 1 :(得分:0)
变量name
未声明。
这很可能是分配变量的错误方法。
(但由于你没有显示name
的声明,因此很难确定)
rooms[numOfRooms].Name=name; // Use Strcpy, strdup, or similar.