F print allocation de memoir

Résolu
sodival Messages postés 10 Date d'inscription mercredi 8 décembre 2004 Statut Membre Dernière intervention 1 juillet 2005 - 18 déc. 2004 à 12:57
cs_Matt67 Messages postés 549 Date d'inscription samedi 6 septembre 2003 Statut Membre Dernière intervention 6 mars 2010 - 18 déc. 2004 à 21:28
/* Je souhaiterai écrire le contenu texte d'une variable char dans un fichier, comment faire ?
J'ai pri ce code, mais il me comble les espaces non ecrits du char par des caracteres aléatoires,
comment le corriger, comment faire une allocation dynamique pour avoir une taille égale a la chaine saisie ? */

***********************************************

#include <stdio.h> /* header file */
#include <stdlib.h>
int main()
{
char nom[255];
scanf("%s",nom);

int i=100; //a quoi cela sert-il ? :)
FILE *fp; /* file pointer */
if ((fp = fopen("log.txt", "w+"))==NULL) /* open file for output */
{
printf("Cannot open file \n");
exit(1);
}
if (fwrite(&i, sizeof(nom), 1, fp) !=1){
printf("Write error occurred");
exit(1);
}
fclose(fp);
/* open file for input */
fwrite(&nom, sizeof(nom), 1, fp);
fclose(fp);
system("pause");
}

*************************************************

Merci d'avance

6 réponses

cs_Matt67 Messages postés 549 Date d'inscription samedi 6 septembre 2003 Statut Membre Dernière intervention 6 mars 2010 3
18 déc. 2004 à 15:05
Bonjour,

Essaie un truc comme ca (pas de traitement d'erreurs) :

#include <stdio.h>

int main(void)
{
char szLine[201];
FILE *fp;
puts("Entrez une phrase (200 caracteres max) : ");
gets(szLine);
fp = fopen("Fichier.txt", "w");
fputs(szLine, fp);
fclose(fp);
puts("Appuyez sur Entree pour continuer...");
gets(szLine);
return 0;
}

Matt...
3
leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
18 déc. 2004 à 14:07
si t'es en c++, tu simplifie:

#include <fstream>

string Str;

Str = "ce que je veux ecrire dans le fichier\n";

ofstream os ("monfic.txt");

os << Str;

si t'es en C, t'appuye surtt pas sur ce code il est absolument horrible....
les exit sont a proscrire (d'autant plus ds le main) ca prouve que celui qui a ecrit ca etait pas mal a l'ouest....
le system ("pause"); est a éviter aussi sachant qu'il existe des fonctions standard qui evitent de passer en mode kernel pr une simple pause....ensuite je ne connais pas les profils des fonctions fread et fwrite mais son code m'a vraiment l'air pas terrible....si t'es en c++ regarde ds la stl sur ce que je viens de te dire, si t'en en c je te conseille de chercher une autre source et de jeter celle la et partir en courant tres tres vite
0
sodival Messages postés 10 Date d'inscription mercredi 8 décembre 2004 Statut Membre Dernière intervention 1 juillet 2005
18 déc. 2004 à 15:21
lol en faite la source elle est tire de l'aide de dev c++ mais bon vu que ça marchai pas je l'ai trituré de partou :s
je test ton ofstraem et je te dit ça
par contre c'est une variable le "nom" enfin bon je regarde

ps : toutes autre pist'e serai les bien venu
0
sodival Messages postés 10 Date d'inscription mercredi 8 décembre 2004 Statut Membre Dernière intervention 1 juillet 2005
18 déc. 2004 à 15:35
merci leprov et Matt67 pour les reponce rapide
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
plus_plus_fab Messages postés 232 Date d'inscription vendredi 9 janvier 2004 Statut Membre Dernière intervention 8 janvier 2005
18 déc. 2004 à 17:12
hé, on utilise JAMAIS gets, mais fgets sur stdin !
n'est-ce pas ???
0
cs_Matt67 Messages postés 549 Date d'inscription samedi 6 septembre 2003 Statut Membre Dernière intervention 6 mars 2010 3
18 déc. 2004 à 21:28
Bonsoir,

C'est vrai, car pas de controle de debordement mais j'ai fait au plus simple. gets est a proscrire...

Désolé,

Matt...
0
Rejoignez-nous