gpt4 book ai didi

c - 在 C 的 for 循环中使用结构指针时出现一些段错误

转载 作者:行者123 更新时间:2023-12-02 19:10:21 25 4
gpt4 key购买 nike

这是一些打印结构值的简单代码

in_hotel_info 函数用于获取结构输入。(是的,我使用“gets”,因为我的教授强制我使用它)。而且当我将“0”作为输入时,它会结束并返回其输入数字。我使用 sscanf 扫描字符串和数字。

#include <stdio.h>

typedef struct hotel_info hotel;
struct hotel_info
{
char name[30];
int rank;
double popular;
double far;
char breakfast;
};
int in_hotel_info(struct hotel_info *p);
void out_hotel_info(struct hotel_info *p, int N, int G, double D);


int main(void)
{
hotel hotels[100];
hotel *p;
int number = 0, ranks, fars, i;
number = in_hotel_info(hotels);
p = hotels;
printf("%d\n", number);
getchar();
for (; p < p+number; p++)
{
printf("%s %d %lf %lf %c\n", p->name, p->rank, p->popular, p->far, p->breakfast);
}
}

int in_hotel_info(struct hotel_info infos[])
{
char inputs[100];
hotel* p;
p = infos;
int cnt = 0;
while (1)
{
gets(inputs);
if (strcmp(inputs, "0") == 0)
{
break;
}
else
{
sscanf(inputs, "%s %d %lf %lf %c", p->name, &p->rank, &p->popular, &p->far, &p->breakfast);
}
p++;
cnt++;
}
return cnt;
}

问题是,当我尝试打印时

for (; p < p+number; p++)
{
printf("%s %d %lf %lf %c\n", p->name, p->rank, p->popular, p->far, p->breakfast);
}

我所期望的是

mike 2 3.5 4.24 Y

但我经常遇到段错误。

最佳答案

The problem is, when I tried to print

for (; p < p+number; p++)
{
printf("%s %d %lf %lf %c\n", p->name, p->rank, p->popular, p->far, p->breakfast);
}

问题是p < p+numbernumber 严格为正数时,始终为 true,因此 for 永远不会结束,并且您会以未定义的行为(您的段错误)访问数组。


您还有其他问题

  • gets 使用起来非常危险,因为它可以写出数组,使用 fgetsscanf (指定最大长度读取),在考虑的情况下,您可以读取一个数字,然后检查它是否为 0

  • in_hotel_info中,如果用户输入的条目多于您从数组中写入的条目,您需要获取要在参数中读取的最大元素数

  • 当您阅读p->name时如果您从数组中写入的输入名称长度超过 29,请使用 %29s 限制大小而不是%s 。还可以绕过名称开头的空格使用 %29s (前面有一个空格)

  • 您没有检查scanf返回5,因此您没有检测到无效输入

getchar(); main 中很奇怪

关于c - 在 C 的 for 循环中使用结构指针时出现一些段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64400183/

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