0

例如

我有炭str[1024];

memset(str,0,1024);稍后会做

这个可以吗,?或者我需要这样做:

char* str = new char[1024];

谢谢。

4

4 回答 4

5

两者都分配空间,因此两者都可以与 memset 一起使用。两者的区别在于分配空间的位置。

char str[1024];

在堆栈上分配字符串,一旦超出范围就会消失。

char* str = new char[1024];

在堆上分配字符串并将永远存在,直到您 delete[] 它。

于 2012-05-17T00:48:05.860 回答
1

直接回答:没有。

更好的答案:不要在 C++ 中使用 memset。老实说,您可能也不应该在 C 中使用 memset,至少不应该用于它常用的所有用途。尤其是在 C++ 中,将所有字节设置为 0 并不总是“清空”变量的正确方法……甚至是数组。这在技术上也适用于 C,但 memset 背后有数十年的滥用......没有人会做出表现不同的实现。

于 2012-05-17T01:26:41.403 回答
1

正如@HostileFork 已经指出的那样,您可能想要std::string这里。如果您正在做的任何事情都不是特别像字符串,那么您可能想要std::vector<char> str(1024);

无论哪种方式,您都可以肯定您不想要new char[1024](C++ 早期时代的遗留物,如果存在其他设施,可能根本不会出现在该语言中)并且可能也不想要char str[1024];,尽管至少有可能不是一个严重的错误。

于 2012-05-17T02:32:12.440 回答
0

str在字符数组中存储并设置它们memset不是惯用的 C++。

(注意:我确实经常使用惯用这个词。)

说到我的破纪录,我恳请您阅读 Bjarne Stroustrup 的这篇短文:

学习标准 C++ 作为一门新语言

不要(太)害怕向 StackOverflow 资深人士展示您正在处理的问题的更多上下文,因为您可能会对他们建议的对代码的酷重新想象和改进感到惊讶......

为了使这更像是一个答案,您的声明可能应该是:

std::string str;

您不必管理大小,您可以按值将其返回到调用范围(或不返回)。

于 2012-05-17T01:02:01.917 回答