strcat()源码解释和溢出问题

char *
STRCAT(char *dest, const char *src)
{
  strcpy(dest + strlen(dest), src);
  return dest;
}

C语言源码里的dest + strlen(dest)怎么解释

当我运行以下代码时

#include <stdio.h>
#include <string.h>
void main()
{
    char s[10]= "123456789";
    char str[10] = " 123456789";
    strcat(s,str);
    printf("%d\n",sizeof(s));
    printf("%s\n",s);
    
}

字符串s大小并没有改变,为什么容纳了大于其内存的字符串

实际上会有问题的,这已经发生了数组的越界了,C++不检测是否发生数组越界,虽然能输出,但在main函数结束调用后清除函数的栈内存会出现问题。

您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632

非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!

速戳参与调研>>>https://t.csdnimg.cn/Kf0y

你这个理解有点偏差,s字符串定义的时候就要考虑好s和str相加后的最大长度,现在s的最大长度都放满了,当然拷贝不进去。