我开始用C语言编写学习代码,但没有任何课程或课程。 我有一个简单程序的分段错误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;
}
答案 0 :(得分:0)
应该是nom
和prenom
定义空间太小,请尝试让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;
}