首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >memset()函数

memset()函数
EN

Stack Overflow用户
提问于 2011-01-23 23:14:18
回答 8查看 3K关注 0票数 2

我是C/C++的初学者,我遇到了以下代码段:

代码语言:javascript
复制
#define MAX_MSG 1000
char *szBuf = new char[MAX_MSG];
char *szBufRaw = new char[MAX_MSG];
memset(szBuf, ‘\0’, strlen(szBuf));
memset(szBufRaw, ‘\0’, strlen(szBufRaw));

我在这里阅读了关于memset的教程:

http://www.java-samples.com/showtutorial.php?tutorialid=591

我相信上面的代码是正确的,但代码的原始作者认为其中有一个bug,有人能给我一个提示吗?提前谢谢。

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2011-01-23 23:16:59

strlen(szBuf)(和strlen(szBufRaw))仅在有效字符串上返回正确结果。您应该改为传递MAX_MSG

票数 6
EN

Stack Overflow用户

发布于 2011-01-23 23:18:18

strlen()查找数组中的第一个null值,这意味着您不会在内存中设置正确的字节数。

改用MAX_MSG将整个数组设置为null。

票数 6
EN

Stack Overflow用户

发布于 2011-01-23 23:17:32

两个字符数组都未初始化,在它们上使用strlen()是未定义的行为。它不会做你期望的事情。

在给定第一个字符的指针的情况下,strlen()遍历字符串,并返回字符串的长度,即直到找到终止零为止。使用new创建这些数组后,它们不包含任何有意义的内容。这些调用可能返回任何内容,甚至可能使您的程序崩溃。

您想要的是传递数组的大小:

代码语言:javascript
复制
memset(szBuf, ‘\0’, MAX_MSG);
memset(szBufRaw, ‘\0’, MAX_MSG);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4774524

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档