string en C, concatenation etrange

string en C, concatenation etrange - C - Programmation

Marsh Posté le 09-03-2005 à 11:36:06    

:hello: ,

Code :
  1. void gettext(FILE *f, FILE *r, char *string)
  2. {
  3.         int length;
  4.         char c;
  5.         char *command="GETTEXT ";
  6.         strcat (command,string);
  7.        
  8.         //1er printf
  9.         printf("%s\n",command);
  10.        
  11.         length = strlen(command);
  12.         command[length] = 0xff;
  13.        
  14.         //2nd printf
  15.         printf("%s\n",tmp);
  16.         fprintf(f,"%s",command);
  17.  
  18.         fflush(f);
  19.         while ((c = fgetc(r)) != EOF) { putchar(c); }
  20.         printf("\n" );
  21. }


 

Code :
  1. gettext(send,receive,"score70" );


 
 

Code :
  1. GETTEXT score70
  2. GETTEXT score70ÿe70


 
 
Pourquoi le fait de faire ca au milieu
length = strlen(command);
command[length] = 0xff;
 
me rajoute quelquechose apres 0xff (le ÿ)
ÿ definit la fin de notre message lors de lenvoie au serveur via socket.
d ou viens e70 ? j en veus pas.  
 
 

Reply

Marsh Posté le 09-03-2005 à 11:36:06   

Reply

Marsh Posté le 09-03-2005 à 12:19:35    

up

Reply

Marsh Posté le 09-03-2005 à 12:20:46    

T'as pas mis '\0' ;)

Reply

Marsh Posté le 09-03-2005 à 12:40:24    

Code :
  1. gettext(send,receive,"score70\0" );

ne change rien :/ le /0 donne la fin d une string, cest bien la que je dois linserer :/

Reply

Marsh Posté le 09-03-2005 à 12:42:52    

Ouais mais nan. Tu rajoute quand même ton 0xFF. Il faut 0xFF et \0 ;)

Reply

Marsh Posté le 09-03-2005 à 13:32:12    

Ton strcat n'est pas bon.
Tu n'as pas alloué de mémoire pour pouvoir ajouté ton "string" après "command".
Remplace plutôt "command" par quelque chose du genre : char command[255]
 
Edit : En principe faudrait vérifier la taille de string avant ton strcat pour être sûr de ne pas dépasser. (Overflow) A moins que tu sois sûr que string ne dépassera jamais xx caractères ;)


Message édité par Vinx le 09-03-2005 à 13:34:14

---------------
Slack powa | http://www.racingpneu.com
Reply

Marsh Posté le 09-03-2005 à 13:55:19    

xiluoc a écrit :


Code :
  1. void gettext(FILE *f, FILE *r, char *string)
  2. {
  3.         char *command="GETTEXT ";
  4.         strcat (command,string);
  5. }




Ceci est interdit, car  

  • une chaine litéralle n'est pas forcément modifiable
  • elle a une taille fixe et définie, on ne peut donc rien y ajouter..


void gettext(FILE *f, FILE *r, char *string)
{
   char command[128] = "GETTEXT ";
   strcat (command, string);
}


Fonctionne à condition que la taille de 'command' soit suffisante (strncat() est plus sûr...)
 
Dans l'industrie ou utilise plutôt l'allocation dynamique, voir un objet automatique comme FSTR (Flexible STRing) de ma bibliothèque :
 
http://mapage.noos.fr/emdel/clib.htm


Message édité par Emmanuel Delahaye le 09-03-2005 à 13:56:13

---------------
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

Sujets relatifs:

Leave a Replay

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