« Exercices en langage C/Fonctions » : différence entre les versions

Contenu supprimé Contenu ajouté
Thierry46 (discussion | contributions)
→‎Solution proposée : Simplification malloc -> realloc(NULL, suppresion tabulation.
Thierry46 (discussion | contributions)
→‎Éléments fournis : free(NULL) autorisé par la norme + indentation
Ligne 60 :
 
===Éléments fournis===
<div style="width:70100%">{{Boîte déroulante|titre=lire_ligne.c à compléter|contenu =
<source lang="c">
/**
Ligne 121 :
}} </div>
 
<div style="width:70100%">{{Boîte déroulante|titre=lire_ligne.h|contenu =
<source lang="c">
/*
Ligne 157 :
}} </div>
 
<div style="width:70100%">{{Boîte déroulante|titre=main_lire_ligne.c|contenu =
<source lang="c">
/*
Ligne 163 :
* Role ........ : Tester la fonction lire_ligne
* Parametre ... : Aucun
* Code retour . : EXIT_SUCESS (0)
* Auteur ...... : Thierry46
* Version ..... : 1.01 du 304/12/2008
* Licence ..... : GNU GPL.
lire_ligne : Lecture d'une ligne longue dans un fichier texte
Copyright (C) 2008 Thierry46
Ligne 184 :
*
* Compilation . :
* Voir lire_ligne .c pour sa compilation
* gcc -pedantic -Wall -std=c99 -o test_lire_ligne.exe main_lire_ligne.c lire_ligne.o
* Exécution : ./test_lire_ligne.exe
* Fichiers lies : lire_ligne.c, lire_ligne.h, test_lire_ligne.txt
Ligne 201 :
int main(void)
{
FILE *hFicTest = NULL;
char *chaine = NULL;
int numLigne = 1;
int retour = EXIT_SUCCESS;
char message[TAILLE_MAX_MESSAGE];
hFicTest = fopen(FIC_TEST, "r");
if (hFicTest == NULL)
{
(void)printf("%s : le fichier %s n'a pas pu etre ouvert !\n",
__func__, FIC_TEST);
// Je laisse poursuivre pour tester assertion dans lire_ligne. //
}
do
{
chaine = lire_ligne(TAILLE_BUFFER, hFicTest, &retour);
if (retour == EXIT_SUCCESS)
{
{
(void)strncpy(message, "Pas d'erreur", sizeof(message) - 1);
}
}
else if (retour == EOF)
{
{
(void)strncpy(message, "Fin de fichier", sizeof(message) - 1);
}
}
else
{
{
(void)strncpy(message, strerror(retour), sizeof(message) - 1);
}
}
message[sizeof(message) - 1] = '\0';
(void)printf("Ligne %d : retour = %d (%s), chaine lue = \"%s\".\n",
numLigne, retour, message,
(chaine == NULL) ? "! Pointeur NULL !" : chaine);
 
free(chaine);
if ( chaine != NULL);
{
} while (retour == EXIT_SUCCESS);
free(chaine);
chaine = NULL;
if (hFicTest != NULL)
}
{
} while (retour == EXIT_SUCCESS);
(void)fclose(hFicTest);
}
if (hFicTest != NULL)
{
return EXIT_SUCCESS;
(void)fclose(hFicTest);
}
return EXIT_SUCCESS;
} // int main(void)
</source>
}} </div>
 
<div style="width:70100%">{{Boîte déroulante|titre=test test_lire_ligne.txt|contenu =
<pre>
1