【发布时间】:2012-10-07 19:05:43
【问题描述】:
用空终止字符memset整个字符数组的正确和最安全的方法是什么?我可以列出一些用法:
...
char* buffer = new char [ARRAY_LENGTH];
//Option 1: memset( buffer, '\0', sizeof(buffer) );
//Option 2 before edit: memset( buffer, '\0', sizeof(char*) * ARRAY_LENGTH );
//Option 2 after edit: memset( buffer, '\0', sizeof(char) * ARRAY_LENGTH );
//Option 3: memset( buffer, '\0', ARRAY_LENGTH );
...
- 其中任何一个都比其他的有显着优势吗?
- 使用 1、2 或 3 会遇到哪些问题?
- 处理此请求的最佳方式是什么?
【问题讨论】:
-
选项 2 错误,应为
sizeof(char),始终为1。 -
您有“c”标签,但“new char[ARRAY_LENGTH]”不是有效的 C 语法。
-
您的任何选择都不正确!调用 memset 的正确方法是
memset(buffer, '\0', sizeof(char) * ARRAY_LENGTH);。不过 Luchian 指定的语法更好。 -
抱歉标签错误和错字 - 刚刚编辑了问题
-
@Lundin sizeof(char) 的定义是 1。当我看到它时,我实际上将它用作表示对代码进行特别仔细审查的标志。
标签: c++ arrays c++11 memset null-terminated