读书人

这么处理字符串是否安全请大神看看!

发布时间: 2014-01-15 15:40:23 作者: rapoo

这样处理字符串是否安全,请大神看看!!!!
#include <stdio.h>
#include <stdlib.h>
#include <string.h>


char* scp_make_file(char *dpath, char *localfile)
{
char *p, *str;
char *dfpath = (char *)malloc(128);
p = (char *)strrchr(localfile, '/');
strcpy(dfpath, dpath);
dfpath = strcat(dfpath, p);
str = dfpath;
free(dfpath);
return str;
}

int main()
{
char *dpath = "/tmp";
char *localfile = "/home/nisp/test.c";
char *p;
p = scp_make_file(dpath, localfile);
printf("%s\n", p);
return 0;

}
[root@gnos-x64-dev ssh2]# gcc -o test test.c
[root@gnos-x64-dev ssh2]# ./test
/tmp/test.c

效果是达到了相要的效果,不知这样处理是不是最理想的,是否有更好的方法,请不吝赐教。。
[解决办法]
1,char *p, *str;要初始化。
2,char *dfpath = (char *)malloc(128);确定能分配成功,假如为null了怎么办?
3,strcpy这个库函数不安全,会溢出,但是使用的时候却不警告,你能保证没有问题了么?
....


[解决办法]
要安全,还要使用_s类型的函数,比如strcat_s,
strcpy_s,
内存分配好要判断是否成功。
[解决办法]

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


char* scp_make_file(char *dpath, char *localfile)
{
char *p;
static char dfpath[_MAX_PATH];
p = (char *)strrchr(localfile, '/');
strncpy(dfpath, dpath,_MAX_PATH-1);dfpath[_MAX_PATH-1]=0;
if (p!=NULL) strncat(dfpath, p,_MAX_PATH-1-strlen(p));
return dfpath;
}

int main()
{
char *dpath = "/tmp";
char *localfile = "/home/nisp/test.c";
char *p;
p = scp_make_file(dpath, localfile);
printf("%s\n", p);
return 0;
}

没有绝对的安全,只用相对更安全。
[解决办法]
没有绝对的安全,只有相对更安全。
[解决办法]
你这个scp_make_file写的那是相当的不安全啊。

[解决办法]
这段代码功能不能算实现,可靠性也不好。
1、这段代码说达到效果很牵强,字符串在申请的内存空间,但该空间被你free了,其它进程可以使用,那么里面的内容就是未知的了,可能是原来的你要的字符串(如果运气好没被修改的话),也可能是别的内容,所以最后打印出来的东西是未知的。
2、里面用到的指针人为的认为不为空,没做可靠的检验。
[解决办法]
不安全,有字符串溢出的隐患
[解决办法]
不应该在函数体内free,要在函数体外。
[解决办法]
str = dfpath;
free(dfpath);
return str;
-------------------
这么狗血的代码,竟然谁都没看到????

读书人网 >C语言

热点推荐