Aide en c
Fermé
poratokouetha
Messages postés
1
Date d'inscription
lundi 25 août 2014
Statut
Membre
Dernière intervention
25 août 2014
-
25 août 2014 à 13:06
poratokouetha - 26 août 2014 à 10:24
poratokouetha - 26 août 2014 à 10:24
4 réponses
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
25 août 2014 à 13:53
25 août 2014 à 13:53
Bonjour,
Il faudrait poster ton programme pour qu'on puisse t'aider.
Utilise les balises "code c" pour le poster.
Exemple :
<"code c">/*ici tu mets ton code*/<"/code"> (sans les guillemets).
Cdlt,
Il faudrait poster ton programme pour qu'on puisse t'aider.
Utilise les balises "code c" pour le poster.
Exemple :
<"code c">/*ici tu mets ton code*/<"/code"> (sans les guillemets).
Cdlt,
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
25 août 2014 à 21:31
25 août 2014 à 21:31
Ce n'est pas les balises "code" que j'ai demandé mais "code c" comme dans mon exemple. Ca mettra les couleurs en plus :-).
Sinon, pourrais-tu décrire précisément le problème que tu obtiens, ça nous aiderait beaucoup.
Déjà, ce que je vois comme petit problème :
char** tabString = (char*)malloc(sizeof(char*)*100) ;;
Pas besoin de 2 points-virgules.
Le cast n'est pas correct. Il faut mettre (char**). Mais le cast est superflu en C puisque le type de malloc est void*. Exemple :
*(tabString + i)
Pour info, tu peux utiliser tabString[i] qui est plus condensé.
while (! feof(src)){
Attention, feof() ne permet pas de détecter la fin de fichier. Il faut plutôt lire le fichier et vérifier si elle retourne une erreur ou pas.
strcat(token1, *(tabString + i));
token1 a besoin de contenir un '\0'. Il faut donc le mettre après ton malloc().
Petite question : pourquoi utilise de l'allocation dynamique (malloc) avec une taille statique ? Du coup, il ne faut pas oublier tous les free() qui vont bien pour libérer les zones allouées.
b = getchar();
getchar(); tout simplement suffit.
Cdlt,
Sinon, pourrais-tu décrire précisément le problème que tu obtiens, ça nous aiderait beaucoup.
Déjà, ce que je vois comme petit problème :
char** tabString = (char*)malloc(sizeof(char*)*100) ;;
Pas besoin de 2 points-virgules.
Le cast n'est pas correct. Il faut mettre (char**). Mais le cast est superflu en C puisque le type de malloc est void*. Exemple :
char **tabString = malloc(sizeof(char*) * 100);
*(tabString + i)
Pour info, tu peux utiliser tabString[i] qui est plus condensé.
while (! feof(src)){
Attention, feof() ne permet pas de détecter la fin de fichier. Il faut plutôt lire le fichier et vérifier si elle retourne une erreur ou pas.
strcat(token1, *(tabString + i));
token1 a besoin de contenir un '\0'. Il faut donc le mettre après ton malloc().
Petite question : pourquoi utilise de l'allocation dynamique (malloc) avec une taille statique ? Du coup, il ne faut pas oublier tous les free() qui vont bien pour libérer les zones allouées.
b = getchar();
getchar(); tout simplement suffit.
Cdlt,
#include<stdio.h> #include<string.h> #include<stdlib.h> int main ( int arg, char* argv[]){ /* Declaration des variables*/ char c; int b, tab[1000]; int i; char srce[1000],desti[1000]; char seps[] =",";/* note d'espace de caratere*/ char *token = (char*)malloc(sizeof(char)*1000) ; char *string = (char*)malloc(sizeof(char)*1000) ; char** tabString = (char*)malloc(sizeof(char*)*100) ;; /*Allocation de l'espace memoire*/ for(i = 0; i <100; i++) *(tabString + i) = (char*)malloc(sizeof(char)*1000) ; printf(" Entrer le nom du fichier source:"); scanf ("%s",srce); /* ouverture du fichier de lecture*/ FILE *src=fopen(srce,"r"); /* on teste si ca existe*/ if(src==NULL){ printf ("il n'existe pas le fichier %s \n",srce); return 0; } /*ouverture du fichier destinataire*/ printf("entrer le fichier destinataire:"); scanf("%s",desti); FILE *dest=fopen (desti,"w+"); /*operation de separation*/ // token=strtok(string,seps); int cpt = 0; b=1; while (! feof(src)){ fgets(token, 1000, src); string = strtok( token, seps ); while( string != NULL ){ strcpy(*(tabString + cpt), string); string = strtok( NULL, seps ); cpt++; } b = cpt-1; //char *token1 = (char*)malloc(sizeof(char)*1000) ; for(i = 0; i < cpt-1; i++){ char *token1 = (char*)malloc(sizeof(char)*1000) ; strcat(token1, *(tabString + i)); strcat(token1, ":"); strcat(token1, *(tabString + b)); strcat(token1, "\n"); printf(" %s \n", token1); fputs(token1, dest); free(token1); } } //fputs (c ,dest); /*on ferme les descripteur*/ fclose (src); fclose (dest); b = getchar(); return 0; }
mon veritable proble est que lorsque jentre mon fichier le programe decoupe la premiere ligne mais ne decoupe pas le reste
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
Modifié par fiddy le 26/08/2014 à 10:17
Modifié par fiddy le 26/08/2014 à 10:17
Je ne vois pas les corrections des points que je t'ai signalés...
25 août 2014 à 18:10