字符串指针行为我试图理解

Ang*_*ber 2 c pointers

我编写了一个replacechar函数,用替换char替换源char的实例.该函数的工作原理是字符串按预期更改,但是当我尝试使用函数的返回值时,put只输出一个空行.

有人可以解释一下正在发生的事情以及我需要在replacechar中修改的内容.

#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;
}
Run Code Online (Sandbox Code Playgroud)

感谢所有的回复.

我已经改为这个(现在工作正常).

char* replacechar(char* s, char ch1, char ch2) {
   char* p = s;
   while (*p) {
      if (*p == ch1)
         *p = ch2;

      p++;
   }

   return s;
}
Run Code Online (Sandbox Code Playgroud)

Sev*_*yev 5

s一旦指针超过字符串的结尾,它就会返回指针的值.创建一个局部变量replacechar(),然后递增它,并返回原始值s.