关于strlen()函数的用法

JoshuaLui 2016-09-14 09:48:37
为啥会多出来一些字节?多出什么字节了?
...全文
1637 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2016-10-01
  • 打赏
  • 举报
回复
windows里常见的内存填充数据含义 * 0xABABABAB : Used by Microsoft's HeapAlloc() to mark "no man's land" guard bytes after allocated heap memory * 0xABADCAFE : A startup to this value to initialize all free memory to catch errant pointers * 0xBAADF00D : Used by Microsoft's LocalAlloc(LMEM_FIXED) to mark uninitialised allocated heap memory * 0xBADCAB1E : Error Code returned to the Microsoft eVC debugger when connection is severed to the debugger * 0xBEEFCACE : Used by Microsoft .NET as a magic number in resource files * 0xCCCCCCCC : Used by Microsoft's C++ debugging runtime library to mark uninitialised stack memory * 0xCDCDCDCD : Used by Microsoft's C++ debugging runtime library to mark uninitialised heap memory * 0xDEADDEAD : A Microsoft Windows STOP Error code used when the user manually initiates the crash * 0xFDFDFDFD : Used by Microsoft's C++ debugging heap to mark "no man's land" guard bytes before and after allocated heap memory * 0xFEEEFEEE : Used by Microsoft's HeapFree() to mark freed heap memory
  • 打赏
  • 举报
回复
引用 7 楼 lsq19871207 的回复:
两个字符串走进酒吧。 第一个字符串对服务员说:“给我来一瓶啤酒烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫”。 “请原谅我的朋友,”第二个字符串说:“他忘了加\0”。
cocoabird 2016-09-30
  • 打赏
  • 举报
回复
这还是他么的水区吗?东方妹子来管管
starytx 2016-09-30
  • 打赏
  • 举报
回复
引用 10 楼 JoshuaLui 的回复:
[quote=引用 1 楼 starytx 的回复:] strlen的原理是从你给定的字符首地址开始计算,一直到遇到结束符'\0'你这样的情况多半是在20个合法长度内没有遇到正确的结束符。
可是每次都是31,要是遇到\0结束符就结束的话,那应该是个随机数才对啊,其中必有隐情!究竟是哪一点没搞懂呢?![/quote]肯定是遇到结束符就结束了,毋庸置疑。另有隐情的话只有你自己调试一下看看内存到底是啥了
  • 打赏
  • 举报
回复
变量不初始化是作死的节奏
JoshuaLui 2016-09-30
  • 打赏
  • 举报
回复
引用 1 楼 starytx 的回复:
strlen的原理是从你给定的字符首地址开始计算,一直到遇到结束符'\0'你这样的情况多半是在20个合法长度内没有遇到正确的结束符。
可是每次都是31,要是遇到\0结束符就结束的话,那应该是个随机数才对啊,其中必有隐情!究竟是哪一点没搞懂呢?!
paschen 版主 2016-09-14
  • 打赏
  • 举报
回复
strlen是要以\0结尾的字符串,而不是一个字符数组大小
信阳毛尖 2016-09-14
  • 打赏
  • 举报
回复
两个字符串走进酒吧。 第一个字符串对服务员说:“给我来一瓶啤酒烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫”。 “请原谅我的朋友,”第二个字符串说:“他忘了加\0”。
信阳毛尖 2016-09-14
  • 打赏
  • 举报
回复
我也顶风作案吧 char charr[20]; 此处编译运行结果为啥是31?多出来的字节是什么? 多出来的是啥,就是 烫烫烫....(或者类似的乱码) 原因星哥说的很清楚了,至于为什么,因为你代码写的不规范,请记住,不规范就是错误!

char charr[20] = {0};
//char charr[20];
//memset(charr,0,sizeof(charr));
  • 打赏
  • 举报
回复
引用 3 楼 luciferisnotsatan 的回复:
[quote=引用 2 楼 MrMicrosoft 的回复:] 太专业,不懂………~……
版主,星哥坏了水区规矩,怎么办[/quote]解决方案就是,以后看见躲着点走
女神打Boss 2016-09-14
  • 打赏
  • 举报
回复
1楼说的对。。
luciferisnotsatan 2016-09-14
  • 打赏
  • 举报
回复
引用 2 楼 MrMicrosoft 的回复:
太专业,不懂………~……
版主,星哥坏了水区规矩,怎么办
  • 打赏
  • 举报
回复
太专业,不懂………~……
starytx 2016-09-14
  • 打赏
  • 举报
回复
strlen的原理是从你给定的字符首地址开始计算,一直到遇到结束符'\0'你这样的情况多半是在20个合法长度内没有遇到正确的结束符。
爱睡觉的阿狸 2016-09-14
  • 打赏
  • 举报
回复

64,688

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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