http://blog.sina.com.cn/s/blog_75b0e2ad01013afr.html
http://blog.csdn.net/qingtingchen1987/article/details/7698415
http://blog.chinaunix.net/uid-11959329-id-2797040.html
http://www.cnblogs.com/daocaoren/archive/2011/06/29/2092957.html
【参见】http://blog.csdn.net/wudaijun/article/details/8135205#include<iostream> using namespace std; int main() { char p[] ="123456"; // char s[10]; // 正常复制: 123456 -- 123456 char s[4]; // 栈溢出(目标栈空间不够大), output: 56 -- 123456 char *ptr = p + 3; strcpy(s, p); cout<< p << " -- " << s << " --- " << ptr << endl; return 0; } // 栈 内存分配方式 (地址:高(左)->低(右); 数据写入方向:低(右)->高(左)) // ‘/0‘ ‘6‘ ‘5‘ ‘4‘ ‘3‘ ‘2‘ ‘1‘(p) ‘‘ ‘‘ ‘‘ ‘‘(s) // char p[] ="123456";//char s[4]; // ‘/0‘ ‘6‘ ‘5‘ ‘4‘(ptr) ‘/0‘ ‘6‘ ‘5‘(p) ‘4‘ ‘3‘ ‘2‘ ‘1‘(s) //strcpy(s, p); // output : 56 -- 123456 --- 456 // 解析:在这里我们可以知道p=s+4; 然后我们对s进行写入"123456" s所在的四个字节不够用 所以"56"(包括后面的/0)均被写入了p地址 因此输出p将输出56
时间: 2024-10-24 14:40:07