自己写一个strcpy(char*dest,char*src),如何在函数内部实现防御性溢出?
2006-08-25 17:45
921 查看
自己写一个strcpy(char*dest,char*src),如何在函数内部实现防御性溢出?
void strcpy(char*dest, char*src)
{
while (*dest != '/0' && *src != '/0')
{
*(dest++) = *(src++);
}
}
char *strcpy(char *strDestination, const char *strSource);
{
assert((strDestination!=NULL) && (strSource !=NULL));
char *address = strDestination;
while( (*strDestination++ = * strSource++) != '/0') NULL ;
return address ;
}
//以下是高质量C++编程指南上面的解答,楼主参考一下:
char* strcpy(char*strDest,const char*strSrc)
{
assert(strDest!=NULL&&strSrc!=NULL); //2分
char* address=strDest; //2分
while(*(strDest++)=*(strSrc++)!='/0') //2分
NULL;
return address; //2分
}
IsBardReadPtr判断源可读否?
IsBadWritePtr 判断目标地址是否可写,
但这样并不很保险
strcpy() 函数将源字符串复制到缓冲区。没有指定要复制字符的具体数目。复制字符的数目直接取决于源字符串中的数目。如果源字符串碰巧来自用户输入,且没有专门限制其大小,则有可能会陷入大的麻烦中!
如果知道目的地缓冲区的大小,则可以添加明确的检查:
if(strlen(src) >= dst_size) {
/* Do something appropriate, such as throw an error. */
}
else {
strcpy(dst, src);
}
也可以用
strncpy()
代替strcpy()
strncpy(dst, src, dst_size-1);
dst[dst_size-1] = '/0';
确保 strcpy() 不会溢出的另一种方式是,在需要它时就分配空间,确保通过在源字符串上调用 strlen() 来分配足够的空间。例如:
dst = (char *)malloc(strlen(src));
strcpy(dst, src)
void strcpy(char*dest, char*src)
{
while (*dest != '/0' && *src != '/0')
{
*(dest++) = *(src++);
}
}
char *strcpy(char *strDestination, const char *strSource);
{
assert((strDestination!=NULL) && (strSource !=NULL));
char *address = strDestination;
while( (*strDestination++ = * strSource++) != '/0') NULL ;
return address ;
}
//以下是高质量C++编程指南上面的解答,楼主参考一下:
char* strcpy(char*strDest,const char*strSrc)
{
assert(strDest!=NULL&&strSrc!=NULL); //2分
char* address=strDest; //2分
while(*(strDest++)=*(strSrc++)!='/0') //2分
NULL;
return address; //2分
}
IsBardReadPtr判断源可读否?
IsBadWritePtr 判断目标地址是否可写,
但这样并不很保险
strcpy() 函数将源字符串复制到缓冲区。没有指定要复制字符的具体数目。复制字符的数目直接取决于源字符串中的数目。如果源字符串碰巧来自用户输入,且没有专门限制其大小,则有可能会陷入大的麻烦中!
如果知道目的地缓冲区的大小,则可以添加明确的检查:
if(strlen(src) >= dst_size) {
/* Do something appropriate, such as throw an error. */
}
else {
strcpy(dst, src);
}
也可以用
strncpy()
代替strcpy()
strncpy(dst, src, dst_size-1);
dst[dst_size-1] = '/0';
确保 strcpy() 不会溢出的另一种方式是,在需要它时就分配空间,确保通过在源字符串上调用 strlen() 来分配足够的空间。例如:
dst = (char *)malloc(strlen(src));
strcpy(dst, src)
相关文章推荐
- 习题 8.17 写一函数,实现两个字符串的比较。即自己写一个strcmp函数,函数原型为int strcmp(char *p1, char *p2);
- 【C语言】实现char * my_strcat(char * dest,char *src)函数
- 编写实现 函数char *strcat(char *dest ,char *src)
- c语言实现 char * my_strcat(char * dest,char *src)函数 追加字符串
- . 有一个一维数组,里面存储整形数据,请写一个函数,将他们按从大到小的顺序排列,要求执行效率高,并说明如何改善执行效率(该函数必须自己实现,不能使用php函数)。
- 用函数my_strcpy(char *dest,char *sour)实现strcpy()的功能
- 不调用库函数,实现字符串复制函数char * strcpy(char * dst, const char * src) C/C++软件开发求职面试题 必备考点(二)
- 实现char * my_strcat(char * dest,char *src)函数. 返回: dest字符串的地址。 功能:将src指向的字符串追加到dest指向字符串的后面
- 实现char * my_strcat(char * dest,char *src)函数. 返回: dest字符串的地址。 功能:将src指向的字符串追加到dest指向字符串的后面
- 【c语言】实现char * my_strcat(char * dest,char *src)函数. 返回: dest字符串的地址。 功能:将src指向的字符串追加到dest指向字符串的后面
- 实现追加函数char *my_strcat(char *dest,char *src)
- C语言 实现char * my_strcat(char * dest,char *src)函数
- 【C语言】实现char * my_strcat(char * dest,char *src)函数. 返回: dest字符串的地址。 功能:将src指向的字符串追加到dest指向字符串的后面。
- 用c语言实现 编写一个函数reverse_string(char * string)
- 已知strcpy的函数原型:char *strcpy(char *strDest, const char *strSrc)其中strDest 是目的字符串,strSrc 是源字符串。不调用C++/C
- C语言实现字符串拷贝函数char *strcpy(char *dest, const char *src)
- 实现一个函数,打印乘法口诀表,口诀表的行数和列数自己指定,
- 如何自己实现一个可自定义业务流程步骤的工作流
- 1. 实现一个函数,打印乘法口诀表,口诀表的行数和列数自己指定, 输入9,输出9*9口诀表,输出12,输出12*12的乘法口诀表。
- C语言中strcpy(char *strDest, const char *strScr)字符串复制库函数的理解与分析