gpt4 book ai didi

C fscanf 和指针

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

在尝试读/写二进制文件惨败之后,我尝试用 fscanf 和 fprintf 做同样的事情,它似乎工作正常,但是再次..阅读根本不起作用,我再一次无法真正告诉为什么:

结构+指针:

typedef struct flug
{
int flugnummer;
char flugziel[50];
enum TAG flugtag;
int flugzeit_stunde;
int flugzeit_minute;
int gateway;
char status[10];
struct flug *next;
}FLUG;

typedef FLUG *ELEM_ZGR;

全局变量:

enum TAG {
Sonntag,
Montag,
Dienstag,
Mittwoch,
Donnerstag,
Freitag,
Samstag
};

static ELEM_ZGR first;
char const datei[] = "ddslist.txt";

写:

int fluege_sichern() {
ELEM_ZGR curr;
FILE *fp;

curr = first;

if (fopen_s(&fp, datei,"a+") != 0)
{
printf("\nDatei %s nicht zum Anhaengen zu oeffnen",datei);
PAUSE;
exit(1);
}

while (curr != NULL) {
fprintf(fp,"%d %s %d %d %d ",
curr->flugnummer, curr->flugziel, curr->flugzeit_stunde, curr->flugzeit_minute, curr->gateway);
fclose(fp);

curr = curr->next;
}

}

阅读:

void fluege_laden() {
ELEM_ZGR curr;
FILE *fp;

int i = 0;
curr = NULL;

if (fopen_s(&fp, datei,"r") != 0)
{
printf("\nDatei %s nicht zum Lesen zu oeffnen",datei);
PAUSE;
exit(1);
}

printf("\n\nArtikelliste\nArtikelnummer Artikelbezeichnung Artikelpreis");

while (fscanf_s(fp,"%d %s %d %d %d ",
&curr->flugnummer, curr->flugziel, &curr->flugzeit_stunde, &curr->flugzeit_minute, &curr->gateway) != EOF)
{
printf("\n%d %s %d %d %d ",
curr->flugnummer, curr->flugziel, curr->flugzeit_stunde, curr->flugzeit_minute, curr->gateway);
if (++i%10==0)
PAUSE;
}

fclose(fp);
}

请帮帮我。即使是一点点提示也会有很大的帮助。[编辑1]

void fluege_laden() {
ELEM_ZGR curr;
FILE *fp;

int i = 0;
curr = (ELEM_ZGR)malloc(sizeof(struct flug));

if (fopen_s(&fp, datei,"r") != 0)
{
printf("\nDatei %s nicht zum Lesen zu oeffnen",datei);
PAUSE;
exit(1);
}

printf("\n\nArtikelliste\nArtikelnummer Artikelbezeichnung Artikelpreis");

while (fscanf_s(fp,"%d %s %d %d %d ",
&curr->flugnummer, curr->flugziel, &curr->flugzeit_stunde, &curr->flugzeit_minute, &curr->gateway) != EOF)
{
printf("\n%d %s %d %d %d ",
curr->flugnummer, curr->flugziel, curr->flugzeit_stunde, curr->flugzeit_minute, curr->gateway);
if (++i%10==0)
PAUSE;
}

fclose(fp);
}

最佳答案

看:

void fluege_laden() {
ELEM_ZGR curr;
FILE *fp;

int i = 0;
curr = NULL; /* NULL! */

加载时,currNULL。您无法写入 NULL 指针,这是未定义的行为。您需要分配内存。

此外,考虑将指针包含在typedef中,很难理解和记住ELEM_ZGR是一个指针。指针语义在 C 中很重要,最好让所有代码读者都清楚发生了什么。

关于C fscanf 和指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13606321/

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