CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

(C++) Pointeurs

Bartabac
Bartabac
Niveau 1
10 mai 2004 à 21:29:07

J´ai créé la fonction suivante :

bool openFile( FILE *ptr, char *fileName )
{
return( fopen( fileName, " rt" ) ! = NULL )
}

En lui passant comme argument un nom de fichier quelconque et un pointeur vers un objet FILE *, nommé fileSrc.
Hors il semblerait que le programme n´affecte pas le handle retourné par fopen à fileSrc.
Pourquoi ( si tel est le cas ) ?

dnob700
dnob700
Niveau 10
10 mai 2004 à 21:32:32

parce que tu dois appelé comem celà :

fileSrc=openFile(*fileName)

ou alors la fonction doit être :

void openFile(FILE *ptr, char *fileName)
{
ptr=fopen( fileName, " rt" )
}

et puis de toutes facon, ta fonction retourne un bool et nom pas un pointeur. ( c

dnob700
dnob700
Niveau 10
10 mai 2004 à 21:33:16

elle retourne si l´ouverture a réussi et nom pas le handle du fichier.

JeanYvesYves
JeanYvesYves
Niveau 10
10 mai 2004 à 21:37:57

Attention erreur ! !!

void openFile(FILE *ptr, char *fileName)
{
ptr=fopen( fileName, " rt" )
}

si tu passes cela, la valeur de ptr que tu auras passé sera écrasée par l´affectation de fopen.

je te conseille cela :

FILE* openfile(char* filename)
{
return fopen(filename,"rt");
}

tu vas me dire : oui mais s´il ne le trouve pas, je veux qu´il retourne NULL ! !
ben fopen retourne NULL tout seul quand il ne trouve pas :)

d0_ob
d0_ob
Niveau 7
10 mai 2004 à 21:39:01

Non pardon je voulais dire :

bool openFile( FILE *ptr, char *fileName )
{
return( ( ptr=fopen( fileName, " rt" ) ) ! = NULL )
}

d0_ob
d0_ob
Niveau 7
10 mai 2004 à 21:40:21

C´est le même problème que pour :

Non pardon je voulais dire :

bool openFile( FILE *ptr )
{
sizeof( ptr ) ;
}

qui évalue la taille de ptr ( 4 octets selon système ) au lieu de celle de la valeur passée. N´est ce pas ?

JeanYvesYves
JeanYvesYves
Niveau 10
10 mai 2004 à 21:41:03

sinon, dans ton exemple, ce qui ne va pas, est que tu ne te sers pas de ptr, et de +, tu récuperes une copie du pointeur :

bool openFile( FILE *ptr, char *fileName )
{
return( fopen( fileName, " rt" ) ! = NULL )
}

si tu veux un bool qui se retourne, ainsi que ptr de la fonction appelante qui est modifié :

philosophie C++ ( par référence)
bool openFile( FILE*&, char *fileName )
{
return( ptr=fopen( fileName, " rt" ) ! = NULL )
}
/ / appel : bool res=openFile(ptr,"plouf.txt");

philosophie C ( par adresse)
bool openFile( FILE**ptr, char *fileName )
{
return( *ptr=fopen( fileName, " rt" ) ! = NULL )
}
/ / appel : bool res=openFile(&,"plouf.txt");

d0_ob
d0_ob
Niveau 7
10 mai 2004 à 21:41:21

" si tu passes cela, la valeur de ptr que tu auras passé sera écrasée par l´affectation de fopen. "

C´est fait pour : je veux que ptr contienne cette addresse.

Altonfrere
Altonfrere
Niveau 10
10 mai 2004 à 21:42:05

je vois pas l´intérêt d´une telle fonction ! ??

si tu fais fopen tu testes juste après . ..

ptr = fopen(fileName,"rt");

if ( ptr ! = NULL)
{
/ / fichier ouvert
}
else
{
/ / erreur d´ouverture
}

ou plus court :

if ( ptr = fopen(fileName,"rt"))
{
/ / fichier ouvert
}
else
{
/ / erreur d´ouverture
}

d0_ob
d0_ob
Niveau 7
10 mai 2004 à 21:42:06

Un pointeur de pointeur ou des références. Ok merci :)

JeanYvesYves
JeanYvesYves
Niveau 10
10 mai 2004 à 21:42:19

d0_ob > oui, sizeof marche ainsi :)
par contre ta fonction :

bool openFile( FILE *ptr )
{
sizeof( ptr ) ;
}

ne fait rien et te renverra un warning, car tu ne retournes rien :)

d0_ob
d0_ob
Niveau 7
10 mai 2004 à 21:42:38

Et pour alton : j´ai épuré le code ici.

Altonfrere
Altonfrere
Niveau 10
10 mai 2004 à 21:45:58

quoi ? ??

d0_ob
d0_ob
Niveau 7
10 mai 2004 à 21:56:24

J´ai viré un egrande partie du code pour ne laiser que ce qui posait problème : pas besoins de mettre tout le listing, ni de recréer une interface de fonction qui existe déjà.

Altonfrere
Altonfrere
Niveau 10
10 mai 2004 à 21:57:52

hmmm bartabac == d0_ob ? ? :)

Altonfrere
Altonfrere
Niveau 10
10 mai 2004 à 22:02:23

bref, si tu veux modifier un pointeur passé en paramètre il faut passer à la fonction l´adresse de ce pointeur pour le modifier . ..

bool openFile( FILE **ptr, char *fileName )
{
if ( !ptr)
return false;

return( *ptr = fopen( fileName, " rt" ) ! = NULL)
}

Altonfrere
Altonfrere
Niveau 10
10 mai 2004 à 22:04:29

lol ok autant pour moi :) j´ai pas lu le post de JYY

Bartabac
Bartabac
Niveau 1
10 mai 2004 à 22:05:09

Ouaip merci à tous :)
( d0_ob = bartabac :-))) )

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Programmation
  • Création de sites web
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment