gpt4 book ai didi

c - c语言中的gets函数有问题

转载 作者:行者123 更新时间:2023-11-30 20:07:48 24 4
gpt4 key购买 nike

我正在使用 C 编程语言创建一个简单的程序。不幸的是,我现在的一段源代码有问题。运行程序后,我无法将数据存储在学生结构中。

我认为问题出在 ADD_Students() 函数中的 gets() 函数。 (第 60 行)

这是我的源代码:(在 Windows 10 中使用 gnu gcc 编译器的代码块)

#include <stdio.h>
#include <string.h>

#define TRUE 1
#define MAX 3

struct Students
{
char * Name;
char * Field;
char * City;

unsigned int Student_ID;
float Mark;
}Addr_INFO[MAX];


char Menu();
void ADD_Students();
void DEL_Students();
void EDT_Students();

int main()
{
char Selected_ITEM;

while (TRUE)
{
Selected_ITEM = Menu();

switch (Selected_ITEM)
{
case '1' : ADD_Students(); break;
case '2' : DEL_Students(); break;
case '3' : EDT_Students(); break;
default : printf("Wrong number!\n"); exit(0);
}
}
}


char Menu()
{
char Chose;

printf(".----------+ Students information management +----------.\n\n");
printf("[1]. ADD student\n");
printf("[2]. DEL student\n");
printf("[3]. EDT student\n\n");

printf("Please enter your choice: ");
scanf("%c", &Chose);

return Chose;
}


void ADD_Students()
{
register int i;

for (i = 0; i < MAX; i++)
{
printf("[S-%d]. Name: ", i);
gets(Addr_INFO[i].Name);
printf("[S-%d]. Field: ", i);
gets(Addr_INFO[i].Field);
printf("[S-%d]. City: ", i);
gets(Addr_INFO[i].City);
printf("[S-%d]. ID: ", i);
scanf("%d", &Addr_INFO[i].Student_ID);
printf("[S-%d]. Mark: ", i);
scanf("%.2f", &Addr_INFO[i].Mark);
printf("\n");
}
}


void DEL_Students()
{
printf("Test2");
}


void EDT_Students()
{
printf("Test3");
}

发生什么事了?

为什么会出现这种情况?

输出

.----------+ Students information management +----------.

[1]. ADD student
[2]. DEL student
[3]. EDT student

Please enter your choice: 1
[S-0]. Name: [S-0]. Field: [S-0]. City: [S-0]. ID:

最佳答案

您的代码有问题。您正在将未初始化的指针传递给 gets

您永远不会向 Addr_INFO 条目添加实际的内存位。您应该将成员声明为某个适当大小的数组,或者将数据获取到本地缓冲区,然后分配足够大小的内存 (malloc) 并复制本地数据到该缓冲区并将其指针分配给该成员。

关于c - c语言中的gets函数有问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60172355/

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