秋风扫落叶 2021-03-17 18:55 采纳率: 66.7%
浏览 31
已采纳

c语言问题,跪求大佬解惑

为什么--消失了?

 

  • 写回答

2条回答 默认 最新

  • include_iostream_ 2021-03-17 19:48
    关注

    看起来你是试图让func实现字符串连接。

    你的func函数有个非常致命的问题。任何数组通过这种方式进行函数参数传递后,被调函数内数组都会退化为指针,因此,函数中的sizeof得到的值与字符串长度毫无关系,而与程序字长有关。32位下,一个指针是4字节;64位下是8字节。从结果来看,你的编译器编译得到的是一个32位程序,因此,sizeof(p1)会得到4(无论p1实际值是什么,只要是32位机器,这个值一定是4)。你想要的效果应该是令i的初值为p1长度减去1,但实际上,i的初值在32位上永远是3,而在64位上永远是7(请注意:这说的是你编译出来的程序的字长,它与机器字长未必相等)。因此,你的第一个字符串abc--中,i定位到的3,指向的正好是第一个dash,表现出来的就是横杠被忽略掉了。但实际上这个问题和横杠完全无关,它完全是由于对sizeof的误解误用造成的。

    (值得一提的是,就算是不通过函数传参,sizeof求字符串长度也是完全错误的做法。)

    正确的字符串求长度做法:使用strlen(p1)。需要头文件:string.h

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

报告相同问题?

悬赏问题

  • ¥15 基于双目测规则物体尺寸
  • ¥15 wegame打不开英雄联盟
  • ¥15 公司的电脑,win10系统自带远程协助,访问家里个人电脑,提示出现内部错误,各种常规的设置都已经尝试,感觉公司对此功能进行了限制(我们是集团公司)
  • ¥15 救!ENVI5.6深度学习初始化模型报错怎么办?
  • ¥30 eclipse开启服务后,网页无法打开
  • ¥30 雷达辐射源信号参考模型
  • ¥15 html+css+js如何实现这样子的效果?
  • ¥15 STM32单片机自主设计
  • ¥15 如何在node.js中或者java中给wav格式的音频编码成sil格式呢
  • ¥15 不小心不正规的开发公司导致不给我们y码,