C 更改结构中的数据

C 更改结构中的数据,c,struct,C,Struct,我希望能够修改结构。我有以下几点 struct shopDetails { char name[MAX + 1]; }; 然后我从main调用以下函数 void modifyShop(struct shopDetails*shopList, int num) { char nameInput[MAX + 1]; printf("Name Of Shop You Want To Modify: \n"); fgets(nameInput, sizeof(nameInput), std

我希望能够修改结构。我有以下几点

struct  shopDetails {
    char name[MAX + 1];
};
然后我从main调用以下函数

 void modifyShop(struct shopDetails*shopList, int num)
{
char nameInput[MAX + 1];
printf("Name Of Shop You Want To Modify: \n");
fgets(nameInput, sizeof(nameInput), stdin);

char modifyInput[MAX_NAME_LEN + 1];
printf("New Name For Shop: \n");
fgets(modifyInput, sizeof(modifyInput), stdin);
int i = 0;
while (i < num) {
    if (strcmp(shopList->name, nameInput)) {

        //shopList->name = modifyInput;
        return;
    }
    shopList++;
    i++;
}
printf("Couldn't find shop entered.");
}
void modifyShop(struct shopDetails*shopList,int num)
{
字符名称输入[MAX+1];
printf(“要修改的店铺名称:\n”);
fgets(nameInput、sizeof(nameInput)、stdin);
char modifyInput[最大名称长度+1];
printf(“店铺的新名称:\n”);
fgets(修改输入、sizeof(修改输入)、标准输入);
int i=0;
while(i名称,名称输入)){
//shopList->name=修改输入;
返回;
}
购物清单++;
i++;
}
printf(“无法找到已输入的店铺”);
}

我是C语言的新手,很抱歉,如果这是一个糟糕的问题,但我找不到太多关于它的内容,我想知道为什么它不允许我使用注释掉的代码

fgets
保留应删除的任何最终换行符。请看,您似乎正在尝试将shopList->name指向其他位置。我认为您要做的是将modifyInput的内容复制到shopList->name。查看
strncpy
。键入:
fgets(nameInput,sizeof(modifyInput),stdin)应该是
fgets(modifyInput,sizeof(modifyInput),stdin)您的第二个输入覆盖了第一个输入(正如@user3121023所注意到的)。请更正前面提到的错误,然后再继续。a) 
=
不复制字符串,b)
fgets
保留字符串中的换行符,c)第二个
fgets
中的打字错误。除了@Weather Vane的3期之外,
fgets()
需要一个大一点的缓冲区以获得最大输入,因为它可能包含一个
'\n'
fgets
保留任何应该删除的最后换行符。请看,您似乎正在尝试将shopList->name指向其他位置。我认为您要做的是将modifyInput的内容复制到shopList->name。查看
strncpy
。键入:
fgets(nameInput,sizeof(modifyInput),stdin)应该是
fgets(modifyInput,sizeof(modifyInput),stdin)您的第二个输入覆盖了第一个输入(正如@user3121023所注意到的)。请更正前面提到的错误,然后再继续。a) 
=
不复制字符串,b)
fgets
保留字符串中的换行符,c)第二个
fgets
中的打字错误。除了@Weather Vane的3个问题外,
fgets()
需要一个更大的缓冲区,以获得最大输入,因为它可能包含
'\n'