tyf1218405122 发表于 2022-5-28 19:56:07

关于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

zhengyihao1 发表于 2022-5-28 20:37:48

a的数组长度比b大,肯定溢出报错啊..........

想入门的新人 发表于 2022-5-28 20:49:36

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:50:09

想入门的新人 发表于 2022-5-28 20:49


函数原型

wp231957 发表于 2022-5-29 07:47:56

既然溢出了,就是错误的代码,就没有研究的意义

jhq999 发表于 2022-5-29 17:26:29

本帖最后由 jhq999 于 2022-5-29 19:38 编辑


void strcpy(char* des,char* src,int i)
{
        do{des=src}while(i);
}

Ricardo.jin 发表于 2022-6-5 15:22:56

复制要求的是被复制的数组大小必须大于复制过来的数组大小,要不然跟一个电梯一样,就跟一个班级一样,坐30个人,你40多个人过来肯定有人不能坐,导致数据溢出了

桃花飞舞 发表于 2022-6-5 22:47:32

b是目标地址,a是源地址,把源地址字符串拷贝到目标地址处。b的长度可用sizeof(b)计算出来,比a的长度要小,现在是将长度大的串拷贝到长度小的串里。
页: [1]
查看完整版本: 关于strcpy()函数的溢出错误