关于strcpy()函数的溢出错误
#include <stdio.h>#include <string.h>
int main()
{
char a[]="Original string";
char b[]="New string";
strcpy(b,a);
printf("%s\n",a);
printf("%s\n",b);
}
为啥小甲鱼视频里面是ring,发生了溢出错误;
我用devc++编译时候结果是这样的?
Original string
Original string a的数组长度比b大,肯定溢出报错啊.......... char *strcpy(char *s1, const char *s2) //函数的返回值为指向char型的指针, 形参为指向char型的指针
{
char *tmp = s1; // 将指针tmp声明为s1,s1为传入的字符串数组,相当于指向数组第一个元素的指针。
while(*s1++ = *s2++)//字符串数组*s2依次给字符串数组*s1赋值,当指针指向数组*s2的null元素时,赋值表示的判断结果为左操作数的值和类型,也就是0,循环终止,实现*s2向*s1的复制。
;
return tmp; //返回指针tmp,也就是指向字符串数组*s1第一个元素的指针(其行为相当于数组本身)。
} 想入门的新人 发表于 2022-5-28 20:49
函数原型 既然溢出了,就是错误的代码,就没有研究的意义 本帖最后由 jhq999 于 2022-5-29 19:38 编辑
void strcpy(char* des,char* src,int i)
{
do{des=src}while(i);
} 复制要求的是被复制的数组大小必须大于复制过来的数组大小,要不然跟一个电梯一样,就跟一个班级一样,坐30个人,你40多个人过来肯定有人不能坐,导致数据溢出了 b是目标地址,a是源地址,把源地址字符串拷贝到目标地址处。b的长度可用sizeof(b)计算出来,比a的长度要小,现在是将长度大的串拷贝到长度小的串里。
页:
[1]