大神快来,strcpy函数是否会导致溢出?

LongRui888 2015-10-29 02:47:02
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char *a, *b;
int i;
a = (char*) calloc(20, sizeof(char));
b = (char*) calloc(20, sizeof(char));
strcpy(a, "Graduate School of Information Science and Technology");
for(i = 0; i < 20; i++)
printf("b[%d] = %c¥n", i, b[i]);
return 0;
}

b[11] = T
请问 b[12] = ? 以及 b[13] = ?

...全文
257 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
toobug19 2015-10-29
  • 打赏
  • 举报
回复
这是什么鬼代码?b申请了空间,但不赋值,又问字节里面是什么内容?乱码都有可能阿。
LongRui888 2015-10-29
  • 打赏
  • 举报
回复

感谢各位,我在linux里也试了一下,确实如 qldsrx说的结果。

paschen 2015-10-29
  • 打赏
  • 举报
回复
可能会出现溢出,需要程序元自己确保,现在新版VS默认需要使用安全的strcpy_s,该函数需要输入目标字符数组大小,来确保不会溢出。
qldsrx 2015-10-29
  • 打赏
  • 举报
回复
对了,你这个时候如果在return之前添加 free(b); 立刻程序崩溃,因为b这个对象释放时要查找b申请的大小,信息记录在其内存的前面,但被你改写了。
qldsrx 2015-10-29
  • 打赏
  • 举报
回复
我用gnu C在linux下测试是这样的结果,这个其实是和内存分配是否连续有关,如果两次申请的内存是连续内存空间,那么20字节再加上后面申请内存的头部字节(预估是12字节),这样下面一个申请的20字节正好偏移了32字节,自然就是你看到的结果了。
奋起无迹 2015-10-29
  • 打赏
  • 举报
回复
溢出肯定会的。用strcpy时都会提示,这个函数不安全,建议用strcpy_s。 我在VS2013下,这段代码运行不起来。。就是因为这个函数。
jiht594 2015-10-29
  • 打赏
  • 举报
回复
引用 6 楼 yupeigu 的回复:
我用visual c++ 6.0 运行程序后,发现数组b都没有值的
你要干什么啊, 你又没给b赋值
LongRui888 2015-10-29
  • 打赏
  • 举报
回复
我用visual c++ 6.0 运行程序后,发现数组b都没有值的
qldsrx 2015-10-29
  • 打赏
  • 举报
回复
T就是Technology的首字母,那后面的字母自然是e和c了
赵4老师 2015-10-29
  • 打赏
  • 举报
回复
其实电脑开机后物理内存的每个字节都是可读写的,从来不会因为所谓的new、delete或malloc、free而被创建、销毁。区别仅在于操作系统内存管理模块在你读写时是否能发现并是否采取相应动作而已。操作系统管理内存的粒度不是字节而是页,一页通常为4KB。 推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。
jiht594 2015-10-29
  • 打赏
  • 举报
回复
引用 2 楼 yupeigu 的回复:
[quote=引用 1 楼 qldsrx 的回复:] 溢出是肯定会的啊,只要不写入到受保护的内存地址,一般程序不会崩溃,但是这样就很可能会把其他变量的值给替换掉了,导致程序运行不稳定。
哦哦哦,明白。 现在的问题是,这段程序已知: b[11] = T 那么 b[12] = 什么 以及 b[13] = 什么 [/quote] 不一定是什么吧 b和a可能离很远, T不一定是a里面的T
LongRui888 2015-10-29
  • 打赏
  • 举报
回复
引用 1 楼 qldsrx 的回复:
溢出是肯定会的啊,只要不写入到受保护的内存地址,一般程序不会崩溃,但是这样就很可能会把其他变量的值给替换掉了,导致程序运行不稳定。
哦哦哦,明白。 现在的问题是,这段程序已知: b[11] = T 那么 b[12] = 什么 以及 b[13] = 什么
qldsrx 2015-10-29
  • 打赏
  • 举报
回复
溢出是肯定会的啊,只要不写入到受保护的内存地址,一般程序不会崩溃,但是这样就很可能会把其他变量的值给替换掉了,导致程序运行不稳定。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧