gpt4 book ai didi

c - 使用指针打印结构时应用程序崩溃

转载 作者:行者123 更新时间:2023-11-30 15:03:05 24 4
gpt4 key购买 nike

我编写了下面的代码,用于使用指针读取/打印结构。应用程序正在打印数据,但随后崩溃了。似乎在某个地方犯了一些愚蠢的错误。无法找到确切的问题。我尝试在 printStruct 中使用按值传递并在 readStruct 中使用返回结构。没有问题。当我使用指针时,不确定出了什么问题。

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

struct student{
char USN[10];
char name[50];
char gender;
uint8_t age;
};


void printStruct (struct student*);
void readStruct(struct student*);


int main() {

uint8_t numStudents;
printf("Enter number of students\n");
scanf("%d",&numStudents);
struct student firstSemStudent[numStudents];
readStruct(firstSemStudent+0);
printStruct(firstSemStudent+0);
return 0;
}

void printStruct (struct student *var1)
{
printf("USN= %s\n",var1->USN);
printf("Name = %s\n",var1->name);
printf("Age = %d\n",var1->age);
printf("Gender = %c\n",var1->gender);
}

void readStruct(struct student *temp)
{
printf("\nEnter USN: ");
fflush(stdin);
gets(temp->USN);
printf("\nEnter Name: ");
fflush(stdin);
gets(temp->name);
printf("\nEnter age\n");
scanf("%d",&temp->age);
printf("\nEnter the Gender as M/F");
fflush(stdin);
scanf("%c",&temp->gender);
}

最佳答案

首先,uint8_t * 不是 scanf()%d 格式说明符的有效参数类型。使用错误类型的参数会调用 undefined behavior .

之后,从技术上讲,fflush(stdin); 又是未定义的行为,don't do it .

第三,DO NOT use gets(), it is dangerous由于缓冲区很容易溢出。使用fgets()相反。

修复所有问题(或者更确切地说,修复编译器尖叫着提示的警告消息),然后运行代码。

关于c - 使用指针打印结构时应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40846349/

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