URL: https://linuxfr.org/forums/programmation-c--2/posts/concatenation-de-chaine Title: concatenation de chaine Authors: startijenn Date: 2007年06月29日T20:37:23+02:00 Tags: Score: 0 Bonjour, Je débute en C et J'essaie de faire un programme qui lance une commande OS et qui récupère la sortie de cette commande dans une variable. J'ai un debut de programme qui marche mais il me reste 2 problèmes 1) j'arrive à lire la sortie de la commande caractère par caractère, mais quand je les concatene, j'ai une chaine de la bonne longueur mais tous les caracteres sont vides ! 2) Il y a apparemment un problème dans mon utilisation de realloc car le programme se termine par un problème de mémoire J'ai essayé pas mal de chose mais je ne vois vraiment pas de solution. Quelqu'un pourrait il m'aider? Merci d'avance Voici mon programme: #include <stdio.h> #include <stdlib.h> #include <string.h> int main (void) { £spaces£ £/spaces£FILE *output; £spaces£ £/spaces£char vc_car; £spaces£ £/spaces£char *vc_str = NULL; £spaces£ £/spaces£int vn_size; £spaces£ £/spaces£// Execution de la commande OS £spaces£ £/spaces£output = popen ("echo sortie_commande", "r"); £spaces£ £/spaces£if (!output) { £spaces£ £/spaces£fprintf (stderr, "incorrect parameters or too many files.\n"); £spaces£ £/spaces£return EXIT_FAILURE; £spaces£ £/spaces£} £spaces£ £/spaces£vc_car = getc(output); £spaces£ £/spaces£while (vc_car != EOF) { £spaces£ £/spaces£if (!vc_str) { £spaces£ £/spaces£// premiere allocation de memoire pour vc_str £spaces£ £/spaces£vn_size = sizeof(vc_str); £spaces£ £/spaces£vc_str = (char *) malloc (vn_size); £spaces£ £/spaces£} £spaces£ £/spaces£else { £spaces£ £/spaces£// on augmente la taille de vc_str au fur et a mesure des caracteres lus £spaces£ £/spaces£// £spaces£ £/spaces£// vn_size = taille + 1 pour le caractere 0円 indiquant la fin de la chaine £spaces£ £/spaces£vn_size = sizeof(vc_str) + sizeof(vc_car) + 1; £spaces£ £/spaces£vc_str = realloc (vc_str, vn_size); £spaces£ £/spaces£if (vc_str == (char *)NULL) { £spaces£ £/spaces£printf("Cannot allocate memory.\n"); £spaces£ £/spaces£} £spaces£ £/spaces£} £spaces£ £/spaces£vc_str = strcat(vc_str, &vc_car); £spaces£ £/spaces£// Affichage £spaces£ £/spaces£fprintf (stdout, "%c\n", vc_car); £spaces£ £/spaces£fprintf (stdout, "x%sx\n", vc_str); £spaces£ £/spaces£fprintf (stdout, "--------------\n"); £spaces£ £/spaces£vc_car = getc(output); £spaces£ £/spaces£} £spaces£ £/spaces£if (pclose (output) != 0) £spaces£ £/spaces£{ £spaces£ £/spaces£fprintf (stderr, "Could not run more or other error.\n"); £spaces£ £/spaces£} £spaces£ £/spaces£return EXIT_SUCCESS; } ..... et la sortie a l'exécution : vc_car : s vc_str : x�x -------------- vc_car : o vc_str : x��x -------------- *** glibc detected *** realloc(): invalid next size: 0x0804a0b8 *** Abandon

AltStyle によって変換されたページ (->オリジナル) /