`
nanjingjiangbiao_T
  • 浏览: 2586770 次
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

关于strdup函数参数为NULL的分析和建议

 
阅读更多
分析:
前两天在写测试用例的时候发现了一个段错误的bug,最后在追踪代码的时候发现问题出在strdup函数上面,结论是,该函数的参数不能为NULL,一旦为NULL,就会报段错误。
出于对问题的探索,我又自己写了一些写测试:
(1)
#include <string.h>
intmain()
{
const char *null_src_p = NULL;
char *null_dest_p = strdup(null_src_p);
return 0;
}

最终在执行的时候还是报:Segmentation fault
(2)
我找到了strdup的源代码:
char *strdup1(const char *str)
{
size_t len;
char *copy;

len = strlen(str) + 1;
if ((copy = malloc(len)) == NULL)
return (NULL);
memcpy(copy, str, len);
return (copy);
}
继续跟踪发现为题出来strlen,结论:strlen函数参数不能为NULL;
(3)我想strlen参数不能是NULL似乎又是另外一个问题了,且听下回继续分解了。

建议:
大家以后再使用strdup的时候千万别忘记了对参数的判断和检查。
分享到:
评论

相关推荐

    linux C函数之strdup函数分析

    本文主要介绍了linux C函数之strdup函数分析。

    编写名为strdup的函数

    编写名为strdup的函数,此函数使用动态存储分配来产生字符串的副本。例如调用 • p= strdup(str); • 将为和str相同的字符串分配空间,并且把字符串str的内容 复制给新字符串,然后返回指向新字符串的指针,如果...

    编写名为strdup的函数,此函数使用动态存储分配来产生字符串的副本。

    题目: 编写名为strdup的函数,此函数使用动态存储分配来产生字符串的副本。例如调用 • p= strdup(str); • 将为和str相同的字符串分配空间,并且把字符串str的内容 复制给新字符串,然后返回指向新字符串的指针...

    strstr,strdup,strsep 三函数实现

    strstr,strdup,strsep 三函数实现

    VB字符串函数

    VB 常用字符串操作函数 VB 常用字符串操作函数 作者:虚拟小强 教程来源:本站原创 ★★★ 1. ASC(X),Chr(X):转换字符字符码 [格式]: P..

    C语言中的strdup()函数和其与strcpy()函数的区别

    函数说明:strdup()会先用maolloc()配置与参数s 字符串相同的空间大小,然后将参数s 字符串的内容复制到该内存地址,然后把该地址返回。该地址最后可以利用free()来释放。 返回值:返回一字符串指针,该指针指向复制...

    C语言函数速查手册

    C语言常见的函数速查 字符串函数 bcmp bcopy bzero memccpy memchr memcmp memcpy memicmp memmove memset movmem setmem stpcpy strcat strchr strcmp strcmpi strcpy strcspn strdup ...

    C语言函数库函数详细介绍手册

    C语言常用函数库详细的使用说明 字符串函数 bcmp bcopy bzero memccpy memchr memcmp memcpy memicmp memmove memset movmem setmem stpcpy strcat strchr strcmp strcmpi strcpy strcspn ...

    cjson库,包含各种cjson的函数

    cjson的.c和.h文件,里面包含cjson的解析函数等等

    C语言函数速查

    strdup stricmp strlen strlwr strncat strncmp strncmpi strncpy strnicmp strpbrk strrev strset strstr strtok strupr 数学函数 abs acos asin atan atan2 ceil cos cosh exp fabs ...

    Linux 多线程应用中如何编写安全的信号处理函数

    Linux 多线程应用中如何编写安全的信号处理函数

    基于SIP开发软件电话的一些资源(转自YOUTOO)

    至此,我们有了一个简单的开发环境了,可以充分利用网上大量的以oSIP为基础的代码片段和官方说明文档开始具体函数功能的测试和使用了:) --------------------------------...

    《深入学习c++string》2.1版

    3.1.10 strdup/_strdup wcsdup/_wcsdup 24 3.1.11 strncpy wcsncpy 24 3.1.12 strpbrk wcspbrk 24 3.1.13 strrev/_strrev wcsrev/_wcsrev 24 3.1.14 strset/_strset/_strset_l wcsset/_wcsset/_wcsset_l 24 3.1.15 ...

    linux_c API函数大全

    LINUX C函数库API 1.字符测试篇 15 1.1 15 isalnum(测试字符是否为英文或数字) 15 1.2 15 isalpha (测试字符是否为英文字母) 15 1.3 16 isascii(测试字符是否为ASCII 码字符) 16 1.4 17 iscntrl(测试字符是否...

    基于C语言string函数的详解

    @函数原型: char *strdup(const char *s) 函数功能: 字符串拷贝,目的空间由该函数分配 函数返回: 指向拷贝后的字符串指针 参数说明: src-待拷贝的源字符串 所属文件: &lt;string&gt; 代码如下:#include &lt;stdio&gt; #...

    C语言库函数速查 CHM

    字符串函数 bcmp bcopy bzero memccpy memchr memcmp memcpy memicmp memmove memset movmem setmem stpcpy strcat strchr strcmp strcmpi strcpy strcspn strdup stricmp strlen strlwr ...

    C 语言库函数使用手册

    字符串函数 bcmp bcopy bzero memccpy memchr memcmp memcpy memicmp memmove memset movmem setmem stpcpy strcat strchr strcmp strcmpi strcpy strcspn strdup stricmp strlen strlwr ...

    C语言中strlen() strcpy() strcat() strcmp()函数的实现方法

    主要介绍了C语言中strlen() strcpy() strcat() strcmp()函数的实现方法,需要的朋友可以参考下

    ValueInternals..

    // A "safe" implementation of strdup. Allow null pointer to be passed. // Also avoid warning on msvc80.

Global site tag (gtag.js) - Google Analytics