Question sur les fichiers

Question sur les fichiers - C - Programmation

Marsh Posté le 16-04-2010 à 11:22:00    

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)

Reply

Marsh Posté le 16-04-2010 à 11:22:00   

Reply

Marsh Posté le 16-04-2010 à 11:25:37    

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)
Reply

Marsh Posté le 16-04-2010 à 11:28:13    

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
Reply

Marsh Posté le 16-04-2010 à 11:50:13    

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é!  --
Reply

Marsh Posté le 16-04-2010 à 13:05:47    

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

Reply

Marsh Posté le 16-04-2010 à 13:16:16    

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).

Reply

Marsh Posté le 16-04-2010 à 13:16:59    

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
Reply

Marsh Posté le 16-04-2010 à 16:36:36    

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 ?

Reply

Marsh Posté le 16-04-2010 à 18:55:06    

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.

Reply

Marsh Posté le 16-04-2010 à 19:11:00    

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é "*" )

Reply

Marsh Posté le 16-04-2010 à 19:11:00   

Reply

Marsh Posté le 16-04-2010 à 20:01:14    

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é!  --
Reply

Marsh Posté le 16-04-2010 à 20:45:50    

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)
Reply

Marsh Posté le 16-04-2010 à 21:08:52    

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

Reply

Marsh Posté le 16-04-2010 à 21:14:25    

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)
Reply

Marsh Posté le 16-04-2010 à 22:34:54    

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é!  --
Reply

Marsh Posté le 17-04-2010 à 08:37:19    

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.
Reply

Marsh Posté le 18-04-2010 à 18:42:57    

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

Reply

Marsh Posté le 18-04-2010 à 18:46:57    

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)
Reply

Marsh Posté le 18-04-2010 à 18:57:50    

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
Reply

Marsh Posté le 18-04-2010 à 19:06:32    

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)
Reply

Marsh Posté le 18-04-2010 à 19:23:30    

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 ??  

Reply

Marsh Posté le 18-04-2010 à 19:42:02    

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)
Reply

Marsh Posté le 18-04-2010 à 19:58:04    

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

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed