strcpy拷贝越界问题
来源:互联网 发布:数据完整性保护 编辑:程序博客网 时间:2024/05/17 10:06
- #include<stdio.h>
- #include<string.h>
- void main()
- {
- char s[]="123456789";
- char d[]="123";
- strcpy(d,s);
- printf("d=%s,\ns=%s",d,s);
- }
- #include<stdio.h>
- #include<string.h>
- void main()
- {
- char d[]="123";
- char s[]="123456789";
- strcpy(d,s);
- printf("d=%s,\ns=%s",d,s);
- }
- //已知strcpy函数的原型是:
- char * strcpy(char * strDest,const char * strSrc);
- //实现代码
- char * strcpy(char * strDest,const char * strSrc)
- {
- if ((strDest==NULL)||(strSrc==NULL))
- throw "Invalid argument(s)";
- char * strDestCopy=strDest;
- while ((*strDest++=*strSrc++)!='\0');
- return strDestCopy;
- }
3个小例子说明下strcpy()与数组越界
(2012-08-07 10:40:45)数组越界
it
分类: C/C 总结1
Void test1()
{
char string[10]; //甚至string[9]都可以!
char *str1= "0123456789 ";
strcpy(string, str1);
}
数组越界
strcpy()函数是对C风格字符串进行操作的函数,上例的str1是一个字符串,C风格的字符串以‘\0’结束,所以str1虽然看上去只有10个字符,但实际上应加上‘\0’,即应为11个字符,而string数组只有10个元素,而strcpy()函数的实现是遇'\0'而停止拷贝,所以拷贝时实际上是把‘\0’也进行了拷贝,这就导致string数组越界拷贝。
--------------------------------------------------------------------------
2
Void test2()
{
char string[10], str1[10];
for(i=0; i <10;i++)
{
str1[i] = 'a ';
}
strcpy(string, str1);
}
数组越界
如例1,上例说过strcpy()函数是多C风格的字符串进行拷贝,即遇‘\0’而停止拷贝,而本例中str1不是C风格的字符串,而是一个char数组,不是以'\0'结束的,所以strcpy()函数会一直进行拷贝直到遇到第一个'\0'才结束拷贝,所以string越界是必然的,因为我们不知道什么时候遇到'\0'。
--------------------------------------------------------------------------
3.
Void test3(char* str1)
{
char string[10];
if(strlen(str1) <=10)
{
strcpy(string, str1);
}
}
==数组越界
本例str1是一个字符串指针,这里就要说到strlen()函数了,strlen()是计算C风格字符串字符长度的函数,虽然说是计算字符长度,但是实际上计算的只是有效可见字符长度,即不计算'\0',所以本例中如果strlen(str1)计算的长度为10的时候事迹上str1是11个字符,所以拷贝时同样会出现11个字符拷贝到string数组中的情况发生,即会数组越界。
- strcpy拷贝越界问题
- strcpy拷贝越界问题
- strcpy拷贝越界问题
- strcpy拷贝越界问题
- strcpy拷贝越界问题(转)
- strcpy的拷贝问题
- strcpy 拷贝问题
- 关于strcpy 和数组越界的问题
- 指针-strcpy越界
- strcpy-越界-覆盖
- strcpy数组越界
- 关于 字符串的赋值 char *strcpy(char *dest ,char *src) 中越界问题
- 【sb代码】 数组拷贝越界
- 字符串拷贝(strcpy)
- strcpy字符串拷贝函数
- 字符串拷贝函数strcpy()
- 字符串拷贝函数strcpy()
- strcpy字符串拷贝
- 支付SDK
- 使物体按照指定路径移动
- swift中如何写π
- 基于KNN的手写数字识别
- ubuntu下让theano使用GPU
- strcpy拷贝越界问题
- swift自定义按钮文本和图片的位置
- [leetcode] 19. Remove Nth Node From End of List python实现【easy】
- 21下拉列表
- LeetCode:Binary Tree Maximum Path Sum
- JHTP小结_第三章_类、对象、方法及字符串简介
- 铠甲和长矛
- 运动分析和对象跟踪
- Career_Level1