Ouvrir et afficher un fichier texte en C

Résolu
AsM0DeUz Messages postés 19 Date d'inscription jeudi 17 août 2006 Statut Membre Dernière intervention 4 février 2009 - 23 janv. 2007 à 14:09
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 24 janv. 2007 à 10:21
'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

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
23 janv. 2007 à 21:02
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++
3
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
24 janv. 2007 à 10:21
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++
3
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
23 janv. 2007 à 15:30
Tes *char ne sont pas alloués et ne pointent donc sur rien.

ciao...
BruNews, MVP VC++
0
turnerom Messages postés 492 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 12 janvier 2012 1
23 janv. 2007 à 17:08
#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]);
}
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
turnerom Messages postés 492 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 12 janvier 2012 1
23 janv. 2007 à 17:10
Voir même je peux meme penser à rajouter pour l' '\0'
char *CurLine=(char*)malloc(sizeof(char)*LineMaxSize+1)
0
AsM0DeUz Messages postés 19 Date d'inscription jeudi 17 août 2006 Statut Membre Dernière intervention 4 février 2009
23 janv. 2007 à 20:32
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
0
AsM0DeUz Messages postés 19 Date d'inscription jeudi 17 août 2006 Statut Membre Dernière intervention 4 février 2009
24 janv. 2007 à 10:08
Un "free" de *CurLine est il nécessaire ?
0
Rejoignez-nous