gpt4 book ai didi

C fgets 语义错误

转载 作者:行者123 更新时间:2023-11-30 17:09:42 24 4
gpt4 key购买 nike

我是 C 世界的新手,我对 fgets() 函数有疑问。我在 google 上搜索了近 2 个小时的错误,找到了不同的解决方案,但没有一个有效。

我的类太大了,无法只显示它的每个部分,但让我向您展示有问题的部分:

//... kivansag is a struct(!)
if(check == 1){
char name;
printf("Please give me your nickname!\n");
scanf("%s", &name);
strcpy(kivansag.name,&name);

char city;
printf("Please give me your city!\n");
scanf("%s", &city);
strcpy(kivansag.city,&city);

char *address = malloc(100);
printf("Please give me your address!\n");
fgets(address,100,stdin);

if((strlen(address)>0) && address[strlen(address)-1] == '\n'){
address[strlen(address)-1] = '\0';
}

strcpy(kivansag.address,address);
free(address);
}//...

问题是:每次我运行这段代码时,运行的服务器都会在写出“给我你的地址”后跳过fgets(),并执行以下功能。

我可以得到一些建议吗?

更新:

现在我只有这个:

        printf("Please give me your address!\n");           
fgets(kivansag.address,sizeof(kivansag.address),stdin);

if((strlen(kivansag.address)>0) && kivansag.address[strlen(kivansag.address)-1] == '\n'){
kivansag.address[strlen(kivansag.address)-1] = '\0';
}

结构看起来像这样:

struct Kivansag{
//...
char address[100];
};

是的,仍然跳过我的部分...我也尝试使用 fflush(stdin) 来确保一切都清楚,但没有成功。

最佳答案

 scanf("%s", &name);      //you cant use %s to take input in a char variable
...
scanf("%s", &city);

在这些namecity中是两个char变量,而不是以null结尾的字符串。因此,在这里使用 -

strcpy(kivansag.name,&name);

通向UB

您可以将它们声明为数组 -

char name[20];
char city[20];
fgets(name,20,stdin);
...
fgets(city,20,stdin);
strcpy(kivansag.name,name); // note address of name is not required
/* similarly for copying city */

因此,由于下一个 fgets 也不会被跳过。

然后按照你正在做的那样做。

关于C fgets 语义错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33177694/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com