problème C (2)

  • Créateur du sujet Créateur du sujet vibra
  • Date de début Date de début

vibra

Membre actif
5 Décembre 2007
110
0
Bonjour,
Je suis sur mac os x et j'utilise Xcode pour programmer en C.
Il se produit un problème lorsque je veux écrire dans un fichier. Le problème est que le mode d'ouverture "w" agit exactement comme la code d'ouverture "w+", c'est-à-dire que w m'efface le contenu du fichier avant d'écrire dedant, ce qui n'est pas normal…
D'où vient cette erreur ?
Merci de votre aide.
 
Bonjour,
Je suis sur mac os x et j'utilise Xcode pour programmer en C.
Il se produit un problème lorsque je veux écrire dans un fichier. Le problème est que le mode d'ouverture "w" agit exactement comme la code d'ouverture "w+", c'est-à-dire que w m'efface le contenu du fichier avant d'écrire dedant, ce qui n'est pas normal…
D'où vient cette erreur ?
Merci de votre aide.

si tu montrer ton code :siffle:
 
De mémoire :

"w" ouverture en ecriture, si le fichier existe il est vidé, s'il n'existe pas il est créé
"w+" ou "r+" ouverture en lecture/ecriture, si le fichier existe il est vidé, s'il n'existe pas il est créé dans le cas de "w+" mais pas dans le cas de "r+"

Cordialement
 
En fait la différence entre w et w+ c'est que dans un cas on peut lire et pas dans l'autre.
En fait en anglais writing, c'est juste écrire et update c'est écrire/lire c'est ça ?
Merci de ton aide !
 
En fait la différence entre w et w+ c'est que dans un cas on peut lire et pas dans l'autre.
En fait en anglais writing, c'est juste écrire et update c'est écrire/lire c'est ça ?
Merci de ton aide !

Exact !

Cordialement
 
  • J’aime
Réactions: vibra
man fopen

The argument mode points to a string beginning with one of the following
sequences (Additional characters may follow these sequences.):

``r'' Open text file for reading. The stream is positioned at the
beginning of the file.

``r+'' Open for reading and writing. The stream is positioned at the
beginning of the file.

``w'' Truncate file to zero length or create text file for writing.
The stream is positioned at the beginning of the file.

``w+'' Open for reading and writing. The file is created if it does not
exist, otherwise it is truncated. The stream is positioned at
the beginning of the file.

``a'' Open for writing. The file is created if it does not exist. The
stream is positioned at the end of the file. Subsequent writes
to the file will always end up at the then current end of file,
irrespective of any intervening fseek(3) or similar.
:p
 
  • J’aime
Réactions: vibra
J'ai une nouvelle question. C'est d'ailleurs plus une inquiétude !
Si on fait appel à une allocation dynamique et qu'on oublie de faire "free" à la fin, l'os ne peut plus toucher à la mémoire utilisée par l'allocation. Mais alors la mémoire est définitivement perdue ?!!:rateau:
 
À priori seulement ?…:mouais:


Non. Avec Mac OS X, la memoire allouée a une tache est entierement libérée quand la tache se termine, meme via un crash. C'est un des avantages d'UNIX.
Par contre fait gaffe de ne pas allouer des tailles memoires trop grandes (genre tailles negatives mal transtypées) car Mac OS X va gérer du swap sur disque pour allouer des centaines de giga et cela risque de mal se terminer.

Cordialement
 
Non, en fait je ne suis pas rassuré du tout !
Depuis quelques temps une barre violette s'affiche sur mon écran au moment de l'ouverture de la cession, puis disparait. :confused:
Et puis j'ai eu un étrange bug qui faisait que je ne pouvais plus déplacer un dossier car il me l'effaçait…! :rateau::affraid:
Je suppose que ces problèmes viennent du fait que j'ai du toucher à la mémoire en programmant…
 
Non, en fait je ne suis pas rassuré du tout !
Depuis quelques temps une barre violette s'affiche sur mon écran au moment de l'ouverture de la cession, puis disparait. :confused:
Et puis j'ai eu un étrange bug qui faisait que je ne pouvais plus déplacer un dossier car il me l'effaçait…! :rateau::affraid:
Je suppose que ces problèmes viennent du fait que j'ai du toucher à la mémoire en programmant…

Cela me semble difficilement envisageable, plutot un probleme hardware a mon avis...

Cordialement
 
Essaye un reset de la PRAM ou un bon MemTest pour voir ce qui se passe. J'ai eu un soucis avec une barrette mal placée qui me faisait des saloperie niveau affichage.