essayer d’append un caractère à un tableau de caractères

J’essaie d’append le caractère ‘t’ à un tableau de caractères ayant la valeur “hello”. Je détermine la taille du tableau, en créant un nouveau tableau de 1 caractère plus grand, en affectant le nouveau caractère et ‘\ 0’ comme les deux derniers personnages. Je continue à obtenir l’ancienne valeur (bonjour) imprimée. Merci

#include  #include  void append(char * ssortingng,char ch) { int size; for (size=0;size<255;size++) { if (string[size]=='\0') break; } char temp[size+2]; strcpy(temp,string); temp[size+1]='t'; temp[size+2]='\0'; printf("the test string is: %s\n",temp); } int main() { char test[]="hello"; append(&test,'t'); return 0; } 

Premièrement, votre appel de fonction est erroné. CA devrait etre

 append(test,'t'); // When an argument to a function, array decay to pointer to its first element. 

Ensuite, vous devez supprimer le '\0' de la chaîne précédente, sinon vous obtiendrez la même chaîne. C’est parce qu’après avoir ajouté le caractère ch , la nouvelle chaîne ressemblera à

 "hello\0t\0" 

Remarquez le '\0' avant t . printf s’arrêtera à ce caractère nul.

Vous pouvez écraser ce caractère '\0' avec le caractère 't' comme

 temp[size] = ch; temp[size+1] = '\0'; 

Remarque: Votre programme invoque un comportement non défini en raison d’un access temp à l’instruction array temp in.

  temp[size+2]='\0'; 

Une fonction valide peut avoir l’aspect suivant

 void append( const char *ssortingng, char ch ) { size_t size = 0; while ( ssortingng[size] ) ++size; char temp[size+2]; strcpy( temp, ssortingng ); temp[size++] = ch; temp[size++] ='\0'; printf( "the test ssortingng is: %s\n", temp ); } 

Et il faut l’appeler comme

 append( test, 't' ); 

Comme la boucle se rompt à chaque fois que ssortingng[size]=='\0' , une chaîne then est copiée dans temp . Donc, votre temp est toujours terminé à la size . À la fin du temp est "hello\0t\0"

Vous trouvez mais n’écrasez jamais le premier caractère nul.