gpt4 book ai didi

c - C 中文件的段错误

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

我开始用 C 语言进行编码以进行研究,但我们没有任何关于它的类(class)或类(class)。我有一个简单的程序出现段错误 11,但我不知道为什么。我需要使用文件顺便说一句:谢谢您的帮助^^

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

int i;

typedef struct Passager{
char nom[20];
char prenom[20];
int age;
int num_siege;
} Passager;
Passager liste_passagers[30]; //30 = nombre de passagers

int main()
{
FILE* fichier = NULL;
fichier = fopen("/Users/Patoch/Desktop/Patoch /UNI/Informatique/info sem 2/Structure de données/Labo/TP3/Passager2.txt", "r");

if (fichier == NULL)
{ //test de la bonne ouverture du fichiers
printf("Impossible d'ouvrir le fichier Passagers.docx");
exit(EXIT_FAILURE);
}

for (i=0; i<(sizeof(liste_passagers)/sizeof(liste_passagers[0])); i++)
{
fscanf(fichier, "%s %s %d %d", liste_passagers[i].nom, liste_passagers[i].prenom, &liste_passagers[i].age, &liste_passagers[i].num_siege);
printf("nom : %s \n", liste_passagers[i].nom);

}

fclose(fichier);
return 0;
}

最佳答案

应该是nomprenom定义空间太小,尽量让fscanf在需要的时候分配空间。

就像:

fscanf(fp, "%ms", &ptr);

修改后的代码:

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

int i;

typedef struct Passager {
char *nom;
char *prenom;
int age;
int num_siege;
} Passager;
Passager liste_passagers[30]; //30 = nombre de passagers

int main()
{
FILE *fichier = NULL;
fichier = fopen("Passager2.txt", "r");

if (fichier == NULL) {
//test de la bonne ouverture du fichiers
printf("Impossible d'ouvrir le fichier Passagers.docx");
exit(EXIT_FAILURE);
}

for (i = 0; i < (sizeof(liste_passagers) / sizeof(liste_passagers[0])); i++) {
fscanf(fichier, "%ms %ms %d %d",
&liste_passagers[i].nom, &liste_passagers[i].prenom,
&liste_passagers[i].age, &liste_passagers[i].num_siege);
printf("nom : %s \n", liste_passagers[i].nom);
free(liste_passagers[i].nom);
free(liste_passagers[i].prenom);
}

fclose(fichier);
return 0;
}

关于c - C 中文件的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55245732/

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