VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 171|回复: 4

[已解决]vs2019中自定义strcat函数为何没有手动分配内存也可以成功运行

[复制链接]
13_avatar_middle
最佳答案
0 
在线会员 发表于 2022-3-23 09:00:09 | 显示全部楼层 |阅读模式
#include "stdafx.h"

char * strcat(char * dest, const char * src)
{
        char *tmp = dest;

        while (*dest)
                dest++;

        while (*dest++ = *src++);

        return tmp;
}

int main(){

        char dest[] = { "hello" };
        char src[] = { " me" };
        strcat(dest, src);
}

dest和src数组长度都是固定的,为什么可以直接在dest后面接上src,但又不用手动给他分配内存?
最佳答案
52_avatar_small
2022-3-23 12:59:06
你定义的时候就已经分配了空间长度由编译器计算,不是说你分配了才会有这个空间,内存是线性一维空间,你覆盖了紧跟着字符数组的内存区,覆盖到了重要数据程序就会崩溃,你可以回头补补基础,




上一篇:mfc代码创建图片控件
下一篇:函数用法
52_avatar_middle
最佳答案
1 
在线会员 发表于 2022-3-23 12:59:06 | 显示全部楼层    本楼为最佳答案   
bestAnswer
你定义的时候就已经分配了空间长度由编译器计算,不是说你分配了才会有这个空间,内存是线性一维空间,你覆盖了紧跟着字符数组的内存区,覆盖到了重要数据程序就会崩溃,你可以回头补补基础,
13_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2022-3-23 15:24:24 | 显示全部楼层
VC低调 发表于 2022-3-23 12:59
你定义的时候就已经分配了空间长度由编译器计算,不是说你分配了才会有这个空间,内存是线性一维空间,你覆 ...

我明白了大佬.其实我只是好奇为啥数组越界了但却没有给出警告.刚学的时候在数组越界这吃了不少苦头,但现在才知道C/C++编译器是不检查是否越界的.
52_avatar_middle
最佳答案
1 
在线会员 发表于 2022-3-23 15:56:37 | 显示全部楼层
Luosu 发表于 2022-3-23 15:24
我明白了大佬.其实我只是好奇为啥数组越界了但却没有给出警告.刚学的时候在数组越界这吃了不少苦头,但现 ...

是的没有检查是否越界机制,只有靠程序员自己去养成良好的习惯,至于为什么不添加越界机制,是为了保持程序的运行效率永远第一
13_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2022-3-23 16:14:10 | 显示全部楼层
VC低调 发表于 2022-3-23 15:56
是的没有检查是否越界机制,只有靠程序员自己去养成良好的习惯,至于为什么不添加越界机制,是为了保持程 ...

ok,谢谢大佬
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号-4 )|网站地图wx_jqr

GMT+8, 2022-5-17 22:00

Powered by CcTry.CoM

© 2009-2021 cctry.com

快速回复 返回顶部 返回列表