首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

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

2014-01-15 
这样处理字符串是否安全,请大神看看!!!!#include stdio.h#include stdlib.h#include string.hchar*

这样处理字符串是否安全,请大神看看!!!!
#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;
-------------------
这么狗血的代码,竟然谁都没看到????

热点排行