分析:
前两天在写测试用例的时候发现了一个段错误的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函数分析。
编写名为strdup的函数,此函数使用动态存储分配来产生字符串的副本。例如调用 • p= strdup(str); • 将为和str相同的字符串分配空间,并且把字符串str的内容 复制给新字符串,然后返回指向新字符串的指针,如果...
题目: 编写名为strdup的函数,此函数使用动态存储分配来产生字符串的副本。例如调用 • p= strdup(str); • 将为和str相同的字符串分配空间,并且把字符串str的内容 复制给新字符串,然后返回指向新字符串的指针...
strstr,strdup,strsep 三函数实现
VB 常用字符串操作函数 VB 常用字符串操作函数 作者:虚拟小强 教程来源:本站原创 ★★★ 1. ASC(X),Chr(X):转换字符字符码 [格式]: P..
函数说明:strdup()会先用maolloc()配置与参数s 字符串相同的空间大小,然后将参数s 字符串的内容复制到该内存地址,然后把该地址返回。该地址最后可以利用free()来释放。 返回值:返回一字符串指针,该指针指向复制...
C语言常见的函数速查 字符串函数 bcmp bcopy bzero memccpy memchr memcmp memcpy memicmp memmove memset movmem setmem stpcpy strcat strchr strcmp strcmpi strcpy strcspn strdup ...
C语言常用函数库详细的使用说明 字符串函数 bcmp bcopy bzero memccpy memchr memcmp memcpy memicmp memmove memset movmem setmem stpcpy strcat strchr strcmp strcmpi strcpy strcspn ...
cjson的.c和.h文件,里面包含cjson的解析函数等等
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 多线程应用中如何编写安全的信号处理函数
至此,我们有了一个简单的开发环境了,可以充分利用网上大量的以oSIP为基础的代码片段和官方说明文档开始具体函数功能的测试和使用了:) --------------------------------...
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 1.字符测试篇 15 1.1 15 isalnum(测试字符是否为英文或数字) 15 1.2 15 isalpha (测试字符是否为英文字母) 15 1.3 16 isascii(测试字符是否为ASCII 码字符) 16 1.4 17 iscntrl(测试字符是否...
@函数原型: char *strdup(const char *s) 函数功能: 字符串拷贝,目的空间由该函数分配 函数返回: 指向拷贝后的字符串指针 参数说明: src-待拷贝的源字符串 所属文件: <string> 代码如下:#include <stdio> #...
字符串函数 bcmp bcopy bzero memccpy memchr memcmp memcpy memicmp memmove memset movmem setmem stpcpy strcat strchr strcmp strcmpi strcpy strcspn strdup stricmp strlen strlwr ...
字符串函数 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()函数的实现方法,需要的朋友可以参考下
// A "safe" implementation of strdup. Allow null pointer to be passed. // Also avoid warning on msvc80.