Petit soucis avec strcat

Petit soucis avec strcat - C - Programmation

Marsh Posté le 20-09-2006 à 13:32:24    

Salut,
 J'ai un (petit) soucis avec un petit prog C au niveau de l'instruction strcat dans le listing suivant:
 
#include <stdio.h>
#include <string.h>
#define ERREUR_NBPARAM   1
#define ERREUR_OUVERTURE  1
#define LONG    256
 
 
int longueur( char *chaine )
{
 int index = 0;
 while( chaine[ index ++ ] );
 return index;
}
 
int main(int argc,char *argv[], char *env[])
{
 
 //Déclaration des variables globales
 FILE *f1;
 int c;
 int n1,n2,ind_ligne =0 ;
 char zone[256];
 char ligne[256];
 
 
 if (argc < 1 )
 {
  printf("Anomalies sur le nombre de parametres\n" );
  printf("Nb param saisi: %d %s",argc,"\n" );
  return ERREUR_NBPARAM;
 }
 if ((f1 = fopen(argv[1],"r" )) == NULL)
    {
  printf("Impossible d'ouvrir le fichier données en lecture: %s %s",argv[1],"\n" );
    return ERREUR_OUVERTURE;
    }
 // Lecture du flux
 while (fgets(ligne,LONG,f1) != NULL)   /*  stop sur fin de fichier ou erreur  */
    {
   /*   utilisation de ligne   */
  ind_ligne=0;
  strcpy(zone,"" );
  printf("NB carac. de la ligne: %i \n",longueur(ligne) );
  while (ind_ligne < longueur(ligne)  )
  {    
   printf("zone: %s\n",zone);
   printf("ligne: %c\n",ligne[ind_ligne]);
  strcat(zone,ligne[ind_ligne] );
   ind_ligne++;
  }
  printf("%s \n",zone);
  n1++;
 }
 printf("Nombre de ligne dans le fichier : %s %d\n",argv[1],n1);
 fclose(f1);
}
 
 
A chaque compilation j'obtiens:
comparaison.c: In function `main':
comparaison.c:62: warning: passing arg 2 of `strcat' makes pointer from integer without a cast
 
Le message est clair mais je tourne en rond...

Reply

Marsh Posté le 20-09-2006 à 13:32:24   

Reply

Marsh Posté le 20-09-2006 à 13:35:27    

tu passe un char en second paramètre au lieu d'un pointeur


---------------
Töp of the plöp
Reply

Marsh Posté le 20-09-2006 à 13:38:15    

ok: je remplace et met:  
char *ligne;
 
 
et j'obtiens la meme erreur de compilation...je suis sur que cela est trop con

Reply

Marsh Posté le 20-09-2006 à 13:39:41    

strcat(zone,ligne)


---------------
Töp of the plöp
Reply

Marsh Posté le 20-09-2006 à 13:41:22    

Oué mais si je vais lire caractere par caractere la ligne..pour la mettre dans une variable dés que je suis tombé sur un caractere spécial (pas encore dans le prog)/

Reply

Marsh Posté le 20-09-2006 à 13:41:39    

je veux cumulé les caracteres dans zone

Reply

Marsh Posté le 20-09-2006 à 13:46:35    

alors pourquoi utilises tu strcat ?
t'as lu ce que cela prenait en argument et le résultat de cette fonction ?


---------------
Töp of the plöp
Reply

Marsh Posté le 20-09-2006 à 13:48:05    

oui 1 *char
et en deux const * char
 
Bon bah si je veux cumuler des char dans un *char je peux pas utiliser cette fonction alors?

Reply

Marsh Posté le 20-09-2006 à 13:49:04    

fais le à la main, ça ira plus vite...
 
 
EDIT: strcat concatène deux chaines de caractères. Toi, tu veux concaténer un caractère au bout d'une chaine. C'est pas la même chose...


Message édité par franceso le 20-09-2006 à 13:50:21

---------------
TriScale innov
Reply

Marsh Posté le 20-09-2006 à 13:49:58    

Cad?
suis en train de reprendre mais cours de C, donc quelques lacunes

Reply

Marsh Posté le 20-09-2006 à 13:49:58   

Reply

Marsh Posté le 20-09-2006 à 13:50:10    

obut76 a écrit :

oui 1 *char
et en deux const * char
 
Bon bah si je veux cumuler des char dans un *char je peux pas utiliser cette fonction alors?


pourquoi diantre t'acharner à mettre un char en lieu et place d'un char* ?
tu crois pas que ca va marcher quand meme ?
 
Sinon une de tes options possibles est sprintf.


---------------
Töp of the plöp
Reply

Marsh Posté le 20-09-2006 à 13:50:55    

obut76 a écrit :

Cad?
suis en train de reprendre mais cours de C, donc quelques lacunes


reprend aussi un peu d'orthographe et de grammaire alors, sans vouloir être désagréable.


---------------
Töp of the plöp
Reply

Marsh Posté le 20-09-2006 à 13:51:15    

Si c'est juste un caractère, utilises snprintf() [:spamafote]
snprintf(zone, 256, "%s%c",zone, ligne[ind_ligne]);
 
Ou alors tu le fais à la main, encore mieux puisque tu es dans une boucle :

size_t len_zone = strlen(zone);
 
while ( machin avec ind_ligne)
{
   /* blahblah */
   zone[len_zone++] = ligne[ind_ligne];
   /* blahblah */
}
zone[len_zone] = '\0';


 

obut76 a écrit :

Cad?
suis en train de reprendre mais cours de C, donc quelques lacunes


Non, il ne s'agit pas là de lacunes. Tu apprends le C, tu ne le reprends pas.
 
Pour t'aider sur ce que fait une fonction : man nom_de_la_fonction
Soit en ligne de commande sur unixoïde, soit dans Google.


Message édité par Elmoricq le 20-09-2006 à 13:54:34
Reply

Marsh Posté le 20-09-2006 à 13:55:01    

obut76 a écrit :

Cad?
suis en train de reprendre mais cours de C, donc quelques lacunes


 
deux possibilités principales à mon avis:
1- sprintf comme t'a dit _darkalt3_
2- tu fais tout à la main: tu gardes un indice pour l'écriture dans 'zone' et tu remplaces ton bloc avec le strcat par:

Code :
  1. zone[ind_zone]=ligne[ind_ligne]; //on copie le caractère à la fin de la zone
  2. ind_zone++; ind_ligne++;         // on incrémente les pointeurs
  3. zone[ind_zone]=0;                // on termine zone par le caractère nul


 
EDIT: Grilled  :(


Message édité par franceso le 20-09-2006 à 13:56:10

---------------
TriScale innov
Reply

Marsh Posté le 20-09-2006 à 13:55:30    

_darkalt3_ a écrit :

reprend aussi un peu d'orthographe et de grammaire alors, sans vouloir être désagréable.


 
Désolée tu l‘es...  :whistle:  

Reply

Marsh Posté le 20-09-2006 à 13:57:00    

oki snprintf c'est bon je ne connaissais pas
 
"Ou alors tu le fais à la main, ça se fait en trois lignes. " --> Tu veux bien préciser?

Reply

Marsh Posté le 20-09-2006 à 13:59:51    

Autant pour moi...

Reply

Marsh Posté le 20-09-2006 à 14:04:22    

acryline a écrit :

Désolée tu l‘es...  :whistle:


moins que le gars qui me vole des 1/10ème aux yeux [:itm]

Message cité 1 fois
Message édité par _darkalt3_ le 20-09-2006 à 14:06:03

---------------
Töp of the plöp
Reply

Marsh Posté le 20-09-2006 à 14:35:56    

_darkalt3_ a écrit :

moins que le gars qui me vole des 1/10ème aux yeux [:itm]


 
Pas pigé j'avoue. Mais je ne voulais pas être désagréable.  :)  
Simplement, ce que j'avais envie de dire c'est que obut76 n'est pas venu ici pour s'entendre dire qu'il a besoin de leçons d'orthographe et de grammaire.  Il y a des gens dont le français n'est pas la langue maternelle, il existe aussi des personnes très douées dans certains domaines et moins d'en d'autres. J'avais l'impression d'une remarque purement gratuite et  je rencontre souvent ça dans les forums d'informatique. Donc j'ai craqué, je me suis  exprimée .  :)  
 
A yé j'ai fini. Désolée pour le flood Obut 76 !

Message cité 2 fois
Message édité par acryline le 20-09-2006 à 14:36:51
Reply

Marsh Posté le 20-09-2006 à 15:03:02    

acryline a écrit :


Simplement, ce que j'avais envie de dire c'est que obut76 n'est pas venu ici pour s'entendre dire qu'il a besoin de leçons d'orthographe et de grammaire.  Il y a des gens dont le français n'est pas la langue maternelle, il existe aussi des personnes très douées dans certains domaines et moins d'en d'autres. J'avais l'impression d'une remarque purement gratuite et  je rencontre souvent ça dans les forums d'informatique. Donc j'ai craqué.  


Dans l'absolu, tu as raison, l'orthographe est hors-sujet, mais au bout d'un moment, moi aussi, je craque. Personellement, je suis nul en orthographe, mais je fais des efforts, je me relis, je me corrige... Pareil quand j'écris en anglais, quitte à vérifier au correcteur...
 
Bref, si on veut, on peut. Alors parfois, il est bon de le rappeler, sinon, on finira par ne plus comprendre les questions. (parfois, je dois relire trois fois une phrase écrite en 'phonétique'...' pas que ça à faire...)
 
Et puis si on prétend utiliser un langage informatique, on doit suivre les regles de syntaxe, de grammaire et de sémantique, alors pourquoi pas dans le langage d'expression ? Ce n'est pas si éloigné...


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 20-09-2006 à 15:07:21    

acryline a écrit :

Pas pigé j'avoue. Mais je ne voulais pas être désagréable.  :)  
Simplement, ce que j'avais envie de dire c'est que obut76 n'est pas venu ici pour s'entendre dire qu'il a besoin de leçons d'orthographe et de grammaire.  Il y a des gens dont le français n'est pas la langue maternelle, il existe aussi des personnes très douées dans certains domaines et moins d'en d'autres. J'avais l'impression d'une remarque purement gratuite et  je rencontre souvent ça dans les forums d'informatique. Donc j'ai craqué, je me suis  exprimée .  :)  
 
A yé j'ai fini. Désolée pour le flood Obut 76 !


 
+1 avec Emmanuel.
 
Le but du forum n'est pas de donner des leçons de français, mais bien écrire est une condition nécessaire pour comprendre et être compris.


---------------
Töp of the plöp
Reply

Marsh Posté le 20-09-2006 à 15:44:12    

Je comprends ce que vous voulez dire, mais je ne suis pas convaincue.  
Je sais ce que c'est de lire des textes incompréhensibles. Mais imaginez la personne qui vient ici et qui poste une message tel que :

Citation :


Cad?
suis en train de reprendre mais cours de C, donc quelques lacunes


Déjà il s'excuse de ne pas savoir...
Je suis sûre qu'il voulait faire le mieux du monde et qu'il a fait une grosse faute d'étourderie. Celui qui demande est toujours dans une position un peu inconfortable, il a besoin d' aide et non qu'on  en  rajoute une couche. Je suis peut être sensible mais ça me fait mal à chaque fois.
Et si une remarque est vraiment nécessaire je pense qu'elle peut être faite sans ironie et sans blesser , peut être même avec un peu d'humour  complice en considérant l'autre comme un égal.

Message cité 2 fois
Message édité par acryline le 20-09-2006 à 15:56:52
Reply

Marsh Posté le 20-09-2006 à 16:01:51    

acryline a écrit :

Je comprends ce que vous voulez dire, mais je ne suis pas convaincue.  
Je sais ce que c'est de lire des textes incompréhensibles. Mais imaginez la personne qui vient ici et qui poste une message tel que :

Citation :


Cad?
suis en train de reprendre mais cours de C, donc quelques lacunes


Déjà il s'excuse de ne pas savoir...
Je suis sûre qu'il voulait faire le mieux du monde et qu'il a fait une grosse faute d'étourderie. Celui qui demande est toujours dans une position un peu inconfortable, il a besoin d' aide et non qu'on  en  rajoute une couche. Je suis peut être sensible mais ça me fait mal à chaque fois.
Et si une remarque est vraiment nécessaire je pense qu'elle peut être faite sans ironie et sans blesser , peut être même avec un peu d'humour  complice en considérant l'autre comme un égal.


 
C'est mignon, mais faut se mettre aussi à la place du lecteur. Les gens motivés en général se bouge le fion pour écrire mieux. Les autres s'en vont sans dire merci, c'est la vie du forum.
On peut pas dire qu'il y ait eu aggression ou foutage de gueule, juste une remarque (justifiée), ça aurait pu être pire avec d'autres forumeurs.


---------------
Töp of the plöp
Reply

Marsh Posté le 20-09-2006 à 16:05:46    

Effectivement! tu n'as pas été  un monstre je le connais !  :)  
C'est l'ambiance générale des forums d'aide que je remets en question ..pas forcément ta remarque qui
si on y regarde de plus prêt et après avoir lu tes autres réponses, était même plutôt sympa.
 
Y'a rien de personnel en tout cas  !

Message cité 1 fois
Message édité par acryline le 20-09-2006 à 16:07:34
Reply

Marsh Posté le 20-09-2006 à 16:08:33    

Hmm. Dans la phrase citée, il n'y a pas de faute d'orthographe.
Il y a des raccourcis semblables au langage parlé, qui personnellement ne me posent pas de problème, et une faute de grammaire.
 
C'est un peu léger pour une telle réprimande. Même si dans le fond je suis d'accord avec toi, il y a quand même une différence entre ça et ce qu'on peut lire parfois.
 
Bref, un débat bien inutile...

Reply

Marsh Posté le 20-09-2006 à 16:10:57    

acryline a écrit :

Effectivement! tu n'as pas été  un monstre je le connais !  :)


 [:vendredi13]  
 

acryline a écrit :

C'est l'ambiance générale des forums d'aide que je remets en question ..


Bah, chaque forum a ses petites habitudes...  
 

acryline a écrit :

pas forcément ta remarque qui si on y regarde de plus prêt et après avoir lu tes autres réponses, était même plutôt sympa.


 [:atsuko]  
 

acryline a écrit :

Y'a rien de personnel en tout cas  !


 [:romf]


---------------
Töp of the plöp
Reply

Marsh Posté le 20-09-2006 à 16:24:17    

acryline a écrit :

Je comprends ce que vous voulez dire, mais je ne suis pas convaincue.


 
Ben le problème, c'est que si le gars orthographie mal sa question, il empêche ensuite les recherches sur le même sujet (ou du moins les recherches ne donnent aucun résultat).
Et on risque aussi un jour de se retrouver avec des messages de ce style

Citation :

SaLut! M$ S|_|cKz!  
 komant k'on installe ma GEForce256 . g voulu tout réinstaller mais linux c'est mortel .  
 g une debian et ca marche pas bien... ca doit etre les interruptions ki fé tou déconé  
 Windaub sux! pleaz posté la rep dans alt.2600 because je lis pas ce groupe (je hac le comt de la fac).


Bon, j'exagère évidemment mais le fait est qu'on apprécie quand-même les gens qui font des efforts du coté de l'écriture et ne pas avoir à relire 6 fois la phrase pour la comprendre...
 

acryline a écrit :

Et si une remarque est vraiment nécessaire je pense qu'elle peut être faite sans ironie et sans blesser , peut être même avec un peu d'humour  complice en considérant l'autre comme un égal.


+1


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed