这家伙又emo了 2022-05-02 12:42 采纳率: 84.6%
浏览 59
已结题

*(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的地址向后移动一个字符的长度吗?为什么结果却完全不同呢?

  • 写回答

3条回答 默认 最新

  • 关注

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

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

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

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

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 5月10日
  • 已采纳回答 5月2日
  • 创建了问题 5月2日

悬赏问题

  • ¥15 mmocr的训练错误,结果全为0
  • ¥15 python的qt5界面
  • ¥15 无线电能传输系统MATLAB仿真问题
  • ¥50 如何用脚本实现输入法的热键设置
  • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
  • ¥30 深度学习,前后端连接
  • ¥15 孟德尔随机化结果不一致
  • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀