一个经典的问题的思考: strcpy覆盖内存
来源:互联网 发布:少女漫画推荐 知乎 编辑:程序博客网 时间:2024/06/15 18:18
下面程序会出现什么问题:
#include<stdio.h>#include<stdlib.h>int main(){ char s[]="123456789"; char d[]="123"; strcpy(d,s); printf("%s,\n%s",d,s); return 0;}
编译运行后结果是:
查看各个字节的地址 d的四个字节的地址分别为 fee2,fee3,fee4,fee5
s的十个字节的地址分别为 fee6,fee7,fee8,fee9·······feef;
压栈中向下生长,由高地址压入低地址,先压栈s中 ‘/0’ ,然后'9'8 7·············然后压入d的/0 3 2 1;
在strcpy前插入断点,运行前
运行过以后结果如下图所示:
可知 d为123456789
s为56789
d和s内存连续 ,复制时将他们的某些值覆盖,才导致了上述问题,那么应该怎样解决呢?
1,可以这样改
#include<stdio.h>#include<stdlib.h>int main(){ char s[10]="123456789"; char d[10]="123"; strcpy(d,s); printf("%s,\n%s",d,s); return 0;}
2 这样改
#include<stdio.h>#include<stdlib.h>int main(){ char *s=(char*)malloc(10); char *d=(char*)malloc(10) strcpy(d,"123456789"); strcpy(s,"123456789"); printf("%s,\n%s",d,s); return 0;}
1 0
- 一个经典的问题的思考: strcpy覆盖内存
- 一个经典的问题的思考: strcpy覆盖内存
- strcpy()和memcpy()函数中忽略的内存覆盖问题
- 考虑到内存覆盖的strcpy实现
- strcpy函数的思考
- 功能函数strcpy的实现(考虑内存覆盖)
- 一个问题的思考
- 经典的strcpy 函数
- 一个问题引发对Linux swap和内存的思考
- 关于strcpy函数的思考
- strcpy函数引起的思考
- 一个关于strcpy()的问题,呵呵
- 只是一个函数的问题strcpy
- 一个经典的问题
- 一个问题引发的思考
- 一个字符串问题的思考
- 一个问题引起的思考
- 一个字符串问题的思考 .
- 浅析 Get 和 Post 的区别
- QWidget,QMainWindow和QDialog的区别
- 四、原型模式Prototype(创建型)
- Widnows bat 编译VS项目
- oracle11g ORA-01017:invalid username/password:logon denied
- 一个经典的问题的思考: strcpy覆盖内存
- linphone-PresenceService.java文件分析
- K-Means聚类算法java实现
- Swift与Objective-C的兼容“黑魔法”:@objc和Dynamic
- 6. ZigZag Conversion
- 版本更新、下载、安装
- xlistview
- linux常用命令2
- TextView Recyclerview省略号相关