*(s+1) = '\0';与*s++='\0'的区别在哪里

原始代码:

int main()
{
    void strfunc(char *s);
    char string[10];

    strfunc(string);
    return 0;
}

void strfunc(char *s)
{
    char *temps;

    *s = getchar();
    temps = s;

    *(s+1) = '\0';
    printf("%s\n", s);
    printf("%s\n", temps);
}

运行结果(没有任何错误):

img

之后我将

*(s+1) = '\0';

改成

*s++ ='\0';

运行结果出错,结果如下:

img

所以我想请教大家一个问题,** *(s+1) = '\0'; *s++ ='\0';**这两者不都是将指针s的地址向后移动一个字符的长度吗?为什么结果却完全不同呢?

为啥把语义如此清晰的代码换成如此糟糕的实现。
s指针的后一位变为结束符

*(s+1) = '\0';

s指针当前的字符变为结束符,s指针指向后一个字符

*s++ ='\0'; 
// 等同于 
*s='\0';
s=s+1;

由于temps指向原s指向的字母,但被设为结束符,所以没有输出。
s指向的是没有任何有意义字符的随机乱码。输出时还越界,没崩算运气好。

用错了吧, *s++ ='\0';是先赋值再自加
你可以试试++ *s ='\0';
有帮助的话望采纳,谢谢!

*s++=(*s)++ 吧好像

*(s+1) 是指针 s + 偏移量 1 ,s 指针指向未改动
*s++ ,s++是指针 s 自增 1 个偏移量,相当于 s = s + 1