Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1928 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Question sur les fichiers

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Question sur les fichiers

n°1984740
lassault1
Posté le 16-04-2010 à 11:22:00  profilanswer
 

Bonjour a tous  :)  
 
Dans ce code on compare fichier != NULL or fichier est un pointeur, donc il a une adresse comme valeur, alors c'est comme si on fessait par exemple : if(15263524 != NULL) non ?  :??:  
 

Code :
  1. if (fichier != NULL)

mood
Publicité
Posté le 16-04-2010 à 11:22:00  profilanswer
 

n°1984744
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 16-04-2010 à 11:25:37  profilanswer
 

http://www.cplusplus.com/reference [...] dio/fopen/

Citation :


Return Value
 
If the file has been succesfully opened the function will return a pointer to a FILE object that is used to identify the stream on all further operations involving it. Otherwise, a null pointer is returned.


pour résumer : comparer fichier à NULL permet de vérifier si fopen a correctement ouvert le fichier, puisque cette fonction renvoie NULL en cas d'erreur à l'ouverture


---------------
J'ai un string dans l'array (Paris Hilton)
n°1984746
breizhbugs
Posté le 16-04-2010 à 11:28:13  profilanswer
 

Bonjour,
un pointeur est avant tout une zone mémoire qui contient une autre adresse comme valeur. C'est le contenu de cette zone qui est comparée a NULL.
Sinon lit  la partie "valeur renvoyée" pour comprendre pourquoi on teste si fichier est différent de NULL: http://pwet.fr/man/linux/fonctions_bibliotheques/fopen
#edit: grilled!


Message édité par breizhbugs le 16-04-2010 à 11:28:41
n°1984761
gilou
Modérateur
Modzilla
Posté le 16-04-2010 à 11:50:13  profilanswer
 

lassault1 a écrit :

Bonjour a tous  :)  
 
Dans ce code on compare fichier != NULL or fichier est un pointeur, donc il a une adresse comme valeur, alors c'est comme si on fessait par exemple : if(15263524 != NULL) non ?  :??:  
 

Code :
  1. if (fichier != NULL)


Tout a fait.
On fait une comparaison du type if(15263524 != NULL), quand la valeur de fichier est l'adresse 15263524.
En général, NULL, c'est une valeur qu'a un pointeur quand tout ne s'est pas bien passé (qu'il n'a pas été associé à quelque chose sur quoi pointer pour une raison ou une autre). Le test if (fichier != NULL) signifie grosso modo: si fichier est un pointeur valable, et qu'il y a pas eu de pb avec la structure sur laquelle il pointe.
A+,
 


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°1984803
lassault1
Posté le 16-04-2010 à 13:05:47  profilanswer
 

Merci mais apparemment le poste de gilou  et de breizhbugs sont contradictoire... j'ai compris les 2 postes mais lequel est juste??

n°1984810
breizhbugs
Posté le 16-04-2010 à 13:16:16  profilanswer
 

lassault1 a écrit :

Merci mais apparemment le poste de gilou  et de breizhbugs sont contradictoire... j'ai compris les 2 postes mais lequel est juste??


Pas du tout,
Un pointeur est une variable dans laquelle on stocke une adresse mémoire. Dans le cas ou fopen() se passe bien, cette variable va contenir l'adresse de la structure FICHIER (donc fichier= 15263524 dans ton exemple), dans le cas ou cela se passe mal, elle contiendra NULL (donc fichier=0).

n°1984811
Elmoricq
Modérateur
Posté le 16-04-2010 à 13:16:59  profilanswer
 

lassault1 a écrit :

Merci mais apparemment le poste de gilou  et de breizhbugs sont contradictoire... j'ai compris les 2 postes mais lequel est juste??


Ces deux messages ne me semblent pourtant pas contradictoires.


Message édité par Elmoricq le 16-04-2010 à 13:17:24
n°1984961
lassault1
Posté le 16-04-2010 à 16:36:36  profilanswer
 

breizhbugs parce que tu disais " C'est le contenu de cette zone qui est comparée a NULL."  et gilou "disait que c'est l'adresse qui est comparée a NULL"
 
Si j'ai bien compris on déclare *fichier = NULL  
Si le fichier a été ouvert alors *fichier pointe sur FILE donc *fichier != NULL car *fichier contient une adresse..
 
C'est ça ?

n°1985000
Elmoricq
Modérateur
Posté le 16-04-2010 à 18:55:06  profilanswer
 

Voila, c'est ça.
 
Le contenu d'une variable de type int, c'est un nombre entier.
Le contenu d'un pointeur, c'est une adresse vers une zone mémoire.
 
Donc, breizhbugs et gilou parlent bien de la même chose : le contenu du pointeur, c'est-à-dire l'adresse qu'il contient, est comparé à NULL.

n°1985004
lassault1
Posté le 16-04-2010 à 19:11:00  profilanswer
 

Merci Elmoricq
 
Moi je pensé plutôt que :
 
fichier != NULL ( là on compare une adresse car fichier est un pointeur)
 
Et *fichier != NULL ( là on compare le contenu du pointeur car on a rajouté "*" )

mood
Publicité
Posté le 16-04-2010 à 19:11:00  profilanswer
 

n°1985008
gilou
Modérateur
Modzilla
Posté le 16-04-2010 à 20:01:14  profilanswer
 

De toute façon, en général, en C, on n'écrit pas:
if (fichier != NULL)
mais tout simplement
if (fichier)
 
Ce lien devrait t'intéresser: http://c-faq.com/null/index.html
Notes qu'en C, NULL n'est pas obligatoirement l'entier 0, ça peut parfois être défini comme (void *)0.
[tandis qu'en C++, NULL vaut toujours 0, par définition]
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°1985013
Un Program​meur
Posté le 16-04-2010 à 20:45:50  profilanswer
 

gilou a écrit :

De toute façon, en général, en C, on n'écrit pas:
if (fichier != NULL)
mais tout simplement
if (fichier)


 
C'est une affaire de style. Les deux s'écrivent, les deux ont des partisans qui luttent farouchement si on veut leur faire utiliser l'autre idiome.
Et ma perception est que leurs nombres sont approximativement égal.
 


---------------
The truth is rarely pure and never simple (Oscar Wilde)
n°1985016
lassault1
Posté le 16-04-2010 à 21:08:52  profilanswer
 

Ah bon??
 
Quel est le sens de if (fichier) ?

n°1985018
Un Program​meur
Posté le 16-04-2010 à 21:14:25  profilanswer
 

Code :
  1. if (ptr)


est équivalent à  

Code :
  1. if (ptr != NULL)


 
de même que

Code :
  1. if (entier)


est équivalent à  

Code :
  1. if (entier != 0)


 
Il faut savoir lire les deux formes même si certains réservent la forme implicite aux _Bool et aux entiers utilisés comme booléen.


---------------
The truth is rarely pure and never simple (Oscar Wilde)
n°1985027
gilou
Modérateur
Modzilla
Posté le 16-04-2010 à 22:34:54  profilanswer
 

Un Programmeur a écrit :


 
C'est une affaire de style. Les deux s'écrivent, les deux ont des partisans qui luttent farouchement si on veut leur faire utiliser l'autre idiome.
Et ma perception est que leurs nombres sont approximativement égal.
 

Oui oui. Je pense qu'il y en a plus qui utilisent la tournure if (p) plutôt que if (p != NULL) si on se restreint juste au programmeurs C. Si on englobe ceux qui font du C++, ou des langages a syntaxe dérivée du C, on doit en avoir à peu près autant dans chaque camp en effet.
A+,  


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°1985035
Sve@r
Posté le 17-04-2010 à 08:37:19  profilanswer
 

lassault1 a écrit :

breizhbugs parce que tu disais " C'est le contenu de cette zone qui est comparée a NULL."  et gilou "disait que c'est l'adresse qui est comparée a NULL"


Il s'agit d'une synonymie. Les deux parlent bien du pointeur "fichier" (le contenu de la case qui se nomme "fichier" si tu préfères)
 

lassault1 a écrit :

Merci Elmoricq
 
Moi je pensé plutôt que :
 
fichier != NULL ( là on compare une adresse car fichier est un pointeur)
 
Et *fichier != NULL ( là on compare le contenu du pointeur car on a rajouté "*" )


Attention !!! *truc ne signifie pas "contenu de truc" mais "contenu de la case mémoire qui se trouve dans le contenu de truc"
Exemple: truc contient la valeur 0x1234
Tu demandes truc, tu demandes son contenu donc 0x1234
Tu demandes "*truc", tu demandes le contenu de ce qu'il y a à l'adresse 0x1234 !!!
 

gilou a écrit :

Oui oui. Je pense qu'il y en a plus qui utilisent la tournure if (p) plutôt que if (p != NULL) si on se restreint juste au programmeurs C. Si on englobe ceux qui font du C++, ou des langages a syntaxe dérivée du C, on doit en avoir à peu près autant dans chaque camp en effet.
A+,  


 
Hey, vous avez aussi ceux qui se battent pour utiliser la syntaxe if(!fichier) [:petrus75]


Message édité par Sve@r le 17-04-2010 à 08:42:09

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1985261
lassault1
Posté le 18-04-2010 à 18:42:57  profilanswer
 

C'est vrai que if (fichier)  est la même chose que if(fichier== 1) ??

n°1985264
Un Program​meur
Posté le 18-04-2010 à 18:46:57  profilanswer
 

Non, c'est la même chose que if (fichier != 0) et ça a été écrit ci-dessus.  Je vais finir par me demander si tu lis et comprends les réponses qu'on te fait.  


---------------
The truth is rarely pure and never simple (Oscar Wilde)
n°1985268
lassault1
Posté le 18-04-2010 à 18:57:50  profilanswer
 

Oui j'ai lu..
 
 if (fichier) n'est pas la même chose que if (fichier != 0) mais if (fichier != NULL) car fichier est un pointeur comme il est dit dans ton exemple ..


Message édité par lassault1 le 18-04-2010 à 18:58:13
n°1985272
Un Program​meur
Posté le 18-04-2010 à 19:06:32  profilanswer
 

0 est une manière valide de donner un pointeur nul, et certains n'utilisent que celle-là.
En passant, if (fichier == 1) ne devrait pas compiler si fichier est un pointeur.


Message édité par Un Programmeur le 18-04-2010 à 19:08:07

---------------
The truth is rarely pure and never simple (Oscar Wilde)
n°1985276
lassault1
Posté le 18-04-2010 à 19:23:30  profilanswer
 

Ok merci..
 
Il y a un truc bête que je comprend pas..
 
Code :
 
 

Code :
  1. for(i = 0; i < 6; i++)
  2.         {
  3.            // instructions
  4.         }


 
Dans cette boucle, a la fin de l'instruction de la 1ere boucle i = 1 car il a été incrémenter, mais lorsqu'il fait la 2eme boucle il va lire i = 0. Alors pourquoi i = 1 ??  

n°1985279
Un Program​meur
Posté le 18-04-2010 à 19:42:02  profilanswer
 

L'initialisation ne se fait qu'une fois.  Donc c'est équivalent à

Code :
  1. i=0;
  2. while (i < 6) {
  3.    // instructions
  4.    i++;
  5. }


---------------
The truth is rarely pure and never simple (Oscar Wilde)
n°1985280
lassault1
Posté le 18-04-2010 à 19:58:04  profilanswer
 

Merci Programmeur... j'avais oublier ça...

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Question sur les fichiers

 

Sujets relatifs
Question de SESSION ...Comparaison de chaine de caractères / Question à la con
[VBA] macro excel pour envoyer plusieurs fichiersquestion sur la gestion des fichiers
question sur le stockage des fichiers pour un site webPetite question à propos de l'accès en mode binaire des fichiers...
[C] Question sur les fichierschtite question sur les flux de fichiers
Question a propo des fichiers en phpQuestion sur la programmation des fichiers *.bat ?
Plus de sujets relatifs à : Question sur les fichiers


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR