如何更改struct数组中的变量而不更改其他变量

时间:2018-04-24 15:01:38

标签: c struct

我正在尝试更改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;

2 个答案:

答案 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.