void copieMot(char* adresse)
{
FILE *registre =NULL;
FILE *registre2 =NULL;
registre=fopen(adresse,"r");
registre2=fopen("LISTE_MOT.txt","w");
do
{
char* s = {0};
fgets(s,20,registre);
fputs(s,registre2);
}while(!feof(registre));
fclose(registre);
fclose(registre2);
}char buffer[255 + 1] = {0};
while (fgets(buffer, 255, registre) != NULL) {
fputs(buffer, registre2);
}
char *s = {0};char *s = NULL;
s = calloc(255 + 1, sizeof(char));
if (s == NULL) {
printf("error\n");
}
/* reste du code */
free(s);
s = NULL;
char s[255 + 1] = {0};
fatal_error a écrit:si tu sais pas comment marche fgets, qqpart, c'est bien parce que tu as identifié que tu sais pas comment elle marche.
Maintenant si tu sais pas comment elle marche, ben cherches comment elle marche!
Tu as des tas d'exemples sur le net.
http://www.tutorialspoint.com/c_standard_library/c_function_fgets.htm
Seconde erreur, tu n'alloues toujours pas ton pointeur char *s.
Personnellement lorsque j'utilise fgets, je préfère déclarer un tableau de char plutôt qu'un pointeur.
Rockleader a écrit:Cela revient à char s[] non ?
J'aurais donc pour ma part plutôt tendance à choisir de faire une allocation dynamique avec calloc et un pointeur, peut être à tord.
char *s = calloc(20 + 1, sizeof(char));
char buffer[20 + 1] = {0};
fgets lit au plus le nombre de caractères passés en n'oubliant pas le zéro :lol3:ampholyte a écrit:Enfin pour te donner une nouvelle indication sur fgets : fgets va lire uniquement le nombre de caractère passé en paramètre. Cela signifie que si ta ligne est supérieur à 20, alors la suite sera lu dans la prochaine tour de boucle.
Non, dans le premier cas s est contiendra une adresse modifiable éventuellement plus tard.Je suis mal placé pour être tatillon; mais lorsque j'écris:
char* s
Cela revient à char s[] non ?
Dans le second cas, s doit être initialisé au moment de la déclaration char s[] = "toto"; et n'est plus modifiable ensuite (on ne pourra plus modifier s en faisant s = "blabla", on pourra éventuellement, suivant les compilos, modifier le contenu s[0], ou s[1] ou .. jusqu'à s[4], mais attention, s[4] contient le zéro terminal de "toto").
fatal_error a écrit:s n'est plus modifiable? ah bon?
char s[] = "toto";
int i = 0;
for (i = 0; i < strlen(s); i++) {
s[i] = 'a';
}
s = "tata"typedef struct inode_s{
char filename[FILENAME_MAX_SIZE];
uint size;
uint nblock; // nblock = (size+BLOCK_SIZE-1)/BLOCK_SIZE
uint block_id;
} inode_t;struct ma_struct {
};
typedef struct ma_struct nouveau_nom;typedef struct {
} ma_struct;typedef struct ma_struct {
};FILE ;)storage [ NUMBER OF DISKS ]Rockleader a écrit:Une autre question; est ce possible de "lier" deux fichiers headers ? En fait peut on avoir autant de headder et fichier c associé pour un seul et unique programme principal ?
AUtre chose; dans une structure j'ai ceci:
Code:
FILEstorage [ NUMBER OF DISKS ]
Normalement on effectue un FILE *controle_adresseFichier
ça ne gène pas si on ne met pas une chaîne de contrôle comme lorsque je faisais FILE *registre ?
EN fait ici si j'ai bien compris on aurait une chaine de controle par disque (représenté par des fichiers)
Je sais pas si je suis très clair dans ma question è_é
FILE *file = NULL;
int tab[10] = {0};
FILE *tab[10];
tab[i] = fopen(PATH, "r+");Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 10 invités
Tu pars déja ?
Identification
Pas encore inscrit ?
Ou identifiez-vous :