C语言malloc和strcpy基本问题

Beyond我爱杨 2014-07-05 10:15:17

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int main(int argc, char* argv[])
{
char *c3 = ( char* )malloc(sizeof(char)*3);
strcpy(c3,"abcdefg");
printf("%d %d %s\n",&c3,c3,c3);
system("pause");
return 0;
}


输出为2686788 4003744 abcdefg

求教,为什么abcdefg都能正常输出?是因为abcdefg占用了另外的空间,然后指针重新指向了吗,还是其他原因?
...全文
320 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Intel0011 2014-07-05
  • 打赏
  • 举报
回复
strcpy不会管目的地的容量,它只将源地址的以'\0'结尾的字符串复制到目的地,目的地太短的话会越界操作 建议使用有字符数限制的版本
char *strncpy( char *strDest, const char *strSource, size_t count );
mujiok2003 2014-07-05
  • 打赏
  • 举报
回复
printf的格式描述要和实参匹配。 打印地址用%p,不要用%d
QQ515311445 2014-07-05
  • 打赏
  • 举报
回复
引用 2 楼 u013025310 的回复:
我的意思是c3指向的是3个字节的堆空间,为什么abcdefg超过3个字节能正常输出,这里strcpy的原理是什么?
溢出,占用了后面的其它空间,可能引发崩溃,当然你程序小,没有不良反应
mujiok2003 2014-07-05
  • 打赏
  • 举报
回复
引用 2 楼 u013025310 的回复:
我的意思是c3指向的是3个字节的堆空间,为什么abcdefg超过3个字节能正常输出,这里strcpy的原理是什么?
已经越界, 行为未定义。 所谓“正常输出“是可能的结果之一。 strcpy的文档:http://www.cplusplus.com/reference/cstring/strcpy/
Beyond我爱杨 2014-07-05
  • 打赏
  • 举报
回复
我的意思是c3指向的是3个字节的堆空间,为什么abcdefg超过3个字节能正常输出,这里strcpy的原理是什么?
Isnis-fallen 2014-07-05
  • 打赏
  • 举报
回复
输出到"/0"空字符

69,371

社区成员

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

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