鱼C论坛

 找回密码
 立即注册
查看: 2084|回复: 7

关于strcpy()函数的溢出错误

[复制链接]
发表于 2022-5-28 19:56:07 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-5-28 20:37:48 | 显示全部楼层

回帖奖励 +10 鱼币

a的数组长度比b大,肯定溢出报错啊..........
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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第一个元素的指针(其行为相当于数组本身)。 
} 
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-28 20:50:09 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-29 07:47:56 From FishC Mobile | 显示全部楼层
既然溢出了,就是错误的代码,就没有研究的意义
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-29 17:26:29 | 显示全部楼层
本帖最后由 jhq999 于 2022-5-29 19:38 编辑

void strcpy(char* des,char* src,int i)
{
        do{des[i]=src[i--]}while(i);
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-5 15:22:56 | 显示全部楼层
复制要求的是被复制的数组大小必须大于复制过来的数组大小,要不然跟一个电梯一样,就跟一个班级一样,坐30个人,你40多个人过来肯定有人不能坐,导致数据溢出了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-5 22:47:32 | 显示全部楼层
b是目标地址,a是源地址,把源地址字符串拷贝到目标地址处。b的长度可用sizeof(b)计算出来,比a的长度要小,现在是将长度大的串拷贝到长度小的串里。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-6 02:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表