这家伙又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 用windows做服务的同志有吗
  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图