A!ive 2019-11-12 17:51 采纳率: 50%
浏览 449

请问strcpy的重叠是什么意思

比如像这样
char s[]="Hello World";
strcpy(s+1,s);
puts(s) ;

输出的时候前面多出来一个H,似乎是正确的
  • 写回答

2条回答 默认 最新

  • 内核之道 PostgreSQL领域优质创作者 2019-11-12 18:55
    关注
    1. 在说明该重叠现象之前,先看下图就可以一目了然了。

    图片说明

    2. 因为字符数组后面会自动添加一个字符串结束符“\0”,所以这里
    strcpy(s+1,s);
    
    或许不会出问题,但是若是strcpy(s+1000, s). 就有大概率dump掉进程。所以在进行内存地址重叠时候,要保证其原始空间足够。
    若超出了其能够容纳字符串的地址空间,操作系统会感知到当前是属于非法操作内存空间,则直接的回应就是dump掉程序,避免带来
    系统级别的灾难。

    若有帮助,还望采纳。谢谢!!!!

    评论

报告相同问题?

悬赏问题

  • ¥20 测距传感器数据手册i2c
  • ¥15 RPA正常跑,cmd输入cookies跑不出来
  • ¥15 求帮我调试一下freefem代码
  • ¥15 matlab代码解决,怎么运行
  • ¥15 R语言Rstudio突然无法启动
  • ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像
  • ¥15 改算法,照着压缩包里边,参考其他代码封装的格式 写到main函数里
  • ¥15 用windows做服务的同志有吗
  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法