QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1092|回复: 2

[问题]为什么分配内存时要多分配3个单元???

[复制链接]
发表于 2006-6-2 14:03:38 | 显示全部楼层 |阅读模式
下面的语句出自一段源程序,它的作用是拷贝某文件夹下所有的内容。打开父文件夹后,需要修改源路径名src,让他在原有的基础上增加子文件夹名fname->d_name,从而成为子文件夹的路径
[code:1]
path_in_src=(char*)malloc(sizeof(char)*(strlen(src)+strlen(fname->d_name)+3));

    strcpy(path_in_src,src);
    strcpy(path_in_src,"/\0");
    strcpy(path_in_src,fname->d_name);
[/code:1]
我不明白的是,为什么要在分配动态内存的时候“+3”呢?
如果说是因为多了一个“/”和一个“\0”,+2不就行了吗干嘛+3啊???

这里面有什么讲究阿??
请教各位拉
发表于 2006-6-3 12:39:56 | 显示全部楼层
是不是这样:
src后加了个反杠表示它是个目录了(这里加了1,src后本来是通过strcpy(path_in_src,"/\0");多了两个位置的,但是fname->d_name会将\0的位置占去),
还有就是在fname->d_name后面可能还要留下反杠加字符串结束符\0的2个位置,
这样加起来就是3了.
回复

使用道具 举报

发表于 2006-6-3 14:55:58 | 显示全部楼层
三个调用都是strcpy我比较难理解,后两个应该把第一个覆盖掉了。
如果最后两个是strcat的话,那你认为那个多出的个一个char就是为fname->d_name拷贝后的'\0'准备的。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-2 14:27 , Processed in 0.043341 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

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