您的位置:首页 > 编程语言 > C语言/C++

C语言零碎记录之strcat【你必须知道的495个C语言问题 电子书下载】

2011-12-26 22:53 176 查看
刚才看了看 你必须知道的495个C语言问题 ,在7.3内存分配 strcat问题上

发现strcat原来是不进行自动分配内存空间的...我晕...strcat是将*s2的字符串附加到*s1上,由于是pointer,所以无法检测内存溢出问题.只能由使用者自行判断.也就是 strcat(char *s1,char *s2) s1的空间 必须 至少是 strlen(s1)+strlen(s2)+1的值.否则内存溢出.

本来我自己写了一个类似的函数,然后发现有个strcat和我写的函数效果一样,就用strcat了.但是其实我写的函数内部有空间分配的!!这个strcat没有.于是呼,我的程序必然有内存泄露或溢出之类的.

=====================================

再次鄙视 Cnblogs的 文件系统. 上传路径 居然不能有空格 太搞笑了,没见过这的,如果考虑安全还是学学chinaUnix的或其他的按照日期随机数保存文件名吧...

贴上 你必须知道的495个C语言问题 下载

你必须知道的495个C语言问题

我自己写个 是char * strplus(char *s1,char *s2); 具体实现稍后贴上.

char * strplus(const char a[],const char b[]){
//USAGE: strplus("aaa","bbb");//a[]="aaa";b[]="bbb";
//printf("strlen %d + %d\n",strlen(a),strlen(b));//3+3 no '\0'
//printf("sizeof %d + %d\n",sizeof(a),sizeof(b));//4+4

char * spp=malloc(strlen(a)+strlen(b)+1);
memcpy(spp,a,strlen(a));
memcpy(spp+strlen(a),b,strlen(b));
memset(spp+strlen(a)+strlen(b),(int)'\0',(size_t)1);
return spp;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: