J'ai écrit une fonction replacechar qui remplace une instance d'un caractère source par un caractère de remplacement. La fonction fonctionne dans la mesure où la chaîne de caractères est modifiée comme prévu, mais lorsque j'essaie d'utiliser la valeur de retour de la fonction, puts ne produit qu'une ligne vide.
Quelqu'un peut-il m'expliquer ce qui se passe et ce que je dois changer dans replacechar pour réparer.
#include <stdio.h> /* puts */
#include <string.h> /* strcpy */
#include <stdlib.h> /* malloc, free */
char* replacechar(char* s, char ch1, char ch2) {
while (*s) {
if (*s == ch1)
*s = ch2;
*s++;
}
return s;
}
int main()
{
char* s = malloc(8);
strcpy(s, "aarvark");
puts(replacechar(s, 'a', 'z')); /* prints blank line */
puts(s); /* prints zzrvzrk as expected */
free(s);
return 0;
}
Merci pour toutes les réponses.
J'ai changé pour ceci (qui fonctionne bien maintenant).
char* replacechar(char* s, char ch1, char ch2) {
char* p = s;
while (*p) {
if (*p == ch1)
*p = ch2;
p++;
}
return s;
}