Remplacer toutes les occurrences d'une sous-chaîne dans une chaîne de caractères en C

Je suis en train de faire une fonction en C pour remplacer toutes les occurrences d'une sous-chaîne dans une chaîne. J'ai fait ma fonction, mais il ne fonctionne que sur la première occurrence de la sous-chaîne dans la plus grande chaîne.

Voici le code pour l'instant:

void strreplace(char string[], char search[], char replace[]){
    char buffer[100];
    char*p = string;
    while((p=strstr(p, search))){
        strncpy(buffer, string, p-string);
        buffer[p-string] = '
void strreplace(char string[], char search[], char replace[]){
char buffer[100];
char*p = string;
while((p=strstr(p, search))){
strncpy(buffer, string, p-string);
buffer[p-string] = '\0'; //EDIT: THIS WAS MISSING
strcat(buffer, replace);
strcat(buffer, p+strlen(search));
strcpy(string, buffer);
p++;
}
} 
'
; //EDIT: THIS WAS MISSING strcat(buffer, replace); strcat(buffer, p+strlen(search)); strcpy(string, buffer); p++; } }

Je ne suis pas nouvelle à la programmation en C, mais il me manque quelque chose ici.

Exemple: pour la chaîne d'entrée "marie a des pommes a", à la recherche de "a" et remplacer par "blabla"

Dans le premier "a" est remplacée correctement, mais le second ne l'est pas.
Le résultat final est "marie blabla pommes hasblabla". Remarquez le second "a" est toujours là.

Ce que je fais mal? 🙂

MODIFIER
Est travaille maintenant. En ajoutant le caractère null de la fin a résolu le problème.
Je sais que la chaîne résultante peut être plus grand que 100. C'est une école de devoirs donc je ne vais pas avoir des chaînes de plus de 20 ans ou plus.

  • Probablement parce qu'ils ne sont pas dans la bibliothèque C standard? (Êtes-vous penser PHP?)
  • Comment avez-vous vu le résultat? avec un débogueur?
  • juste point, commentaire supprimé. Pensée les fonctions PHP en interne mappé à C stdlib (qui ils ont à faire beaucoup de temps), mais pas à ce cas.
  • Cette fonction est un peu risqué que vous ne savez pas avec certitude si la chaîne d'entrée peut contenir 100 octets. Mais cela mis à part, votre while boucle uniquement par incréments p de 1 à chaque passage dans la boucle. Je suppose qu'il doit frapper par la longueur de la chaîne de remplacement.
  • Aussi, ce sont strcat(buffer, p+strlen(search)); et strcpy(string, buffer); sont pour? Vous n'avez pas vraiment besoin de la première ligne, et vous pouvez déplacer la deuxième sortie de la boucle...
InformationsquelleAutor Erik Blenert | 2015-09-05