Ouvrir et afficher un fichier texte en C

Résolu
Signaler
Messages postés
19
Date d'inscription
jeudi 17 août 2006
Statut
Membre
Dernière intervention
4 février 2009
-
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
-
'lut

Je m'initie actuellement au C. Apres avoir fait les exos les plus basiques ... je passe au basique niveau 2
J'ai ecris qques lignes pour afficher le contenu d'un fichier texte (qui fonctionne :)) :

#include <stdio.h>

#define LineMaxSize 80

int main(int argc, char *argv[])
{
    char *pfilename;
    FILE *pfiletxt;
    char *buffer;

    if (argc <= 1)
    {
        printf("what file to open ?");
        return 0;
    }

    pfilename=argv[1];
    pfiletxt=fopen(pfilename,"r");
    if (pfiletxt !=NULL)
    {
        while (fgets(buffer, LineMaxSize, pfiletxt) != NULL)
        {
            printf("%s",buffer);
        }

    }
    else printf ("File does not exist");
    return 0;
}

Seulement dés que je modifie mon prog pour mettre la partie lecture de fichier sous forme de fonction, il plante lamentablement et j'arrive pas a trouver pq :( Il plante la ligne surlignee ci-dessous.

#include <stdio.h>

#define LineMaxSize 80

int OpenBoardFile(char *pFileName);
int initboard(char *pTab, int TabSize, FILE *pBoardFile);

int main(int argc, char *argv[])
{
    if (argc <= 1)
    {
        printf("what file to open ?");
        return 0;
    }
    OpenBoardFile(argv[1]);
}

int OpenBoardFile(char *pFileName)
{
    FILE *pFileTxt;
    char *CurLine;
   
    pFileTxt=fopen(pFileName,"r");
    if (pFileTxt != NULL)
    {
        printf("Test");
        while (fgets(CurLine, LineMaxSize, pFileTxt) !=NULL)
            printf("%s", CurLine);
    }
    else printf ("File does not exist");
    return 0;
}

Je suppose que ca doit etre un probleme de pointeur mais quoi ?

Merci

7 réponses

Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
Indique seulement que dans le 1er cas, tu avais tout lr reste d'un segment libre sous ta variable alors que dans la fonction tu écrases direct EIP et le reste.
Dans tous les cas, faire toujours pointer un pointeur sur un buffer valide.

ciao...
BruNews, MVP VC++
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
Tout ce qui est alloué dynamiquement (malloc(), new, VirtualAlloc(), etc...) doit être libéré avec la fonction ou l'opérateur correspondant au mode d'allocation.

ciao...
BruNews, MVP VC++
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
Tes *char ne sont pas alloués et ne pointent donc sur rien.

ciao...
BruNews, MVP VC++
Messages postés
492
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
12 janvier 2012
1
#include <stdio.h>
#include <stdlib.h>

#define LineMaxSize 80

int OpenBoardFile(char *pFileName)
{
FILE *pFileTxt;
char *CurLine=(char*)malloc(sizeof(char)*LineMaxSize)
;

pFileTxt=fopen(pFileName,"r");
if (pFileTxt != NULL)
{
printf("Test");
while (fgets(CurLine, LineMaxSize, pFileTxt) !=NULL)
printf("%s", CurLine);
}
else printf ("File does not exist");
return 0;
}

int main(int argc, char *argv[])
{
if (argc <= 1)
{
printf("what file to open ?\n");
return 0;
}
OpenBoardFile(argv[1]);
}
Messages postés
492
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
12 janvier 2012
1
Voir même je peux meme penser à rajouter pour l' '\0'
char *CurLine=(char*)malloc(sizeof(char)*LineMaxSize+1)
Messages postés
19
Date d'inscription
jeudi 17 août 2006
Statut
Membre
Dernière intervention
4 février 2009

Ce que je ne comprends pas, c'est pq la premiere version (celle sans la fonction) marche alors que je ne fais pas d'allocation non plus et pas la seconde qui me donne une erreur

Merci
Messages postés
19
Date d'inscription
jeudi 17 août 2006
Statut
Membre
Dernière intervention
4 février 2009

Un "free" de *CurLine est il nécessaire ?