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文字配列にingを格納し、それらを設定することmemsetは、慣用的なC++ではありません。

(注:慣用句という言葉をよく使用します。)

私がどんなに壊れた記録であるかについて言えば、私はあなたにビャーネ・ストロヴルプによるこの短い論文を読むことを懇願します:

新しい言語としての標準C++の学習

StackOverflowのベテランに、あなたが扱っている質問のコンテキストをもっと見せることを(あまりにも)恐れないでください。彼らが提案するコードのクールな再想像力と改善に驚かれるかもしれません...

これをより多くの答えにするために、あなたの宣言はおそらく次のように読むべきです:

std::string str;

サイズを管理する必要はなく、値で呼び出し元のスコープに返す(または返さない)ことができます。

于 2012-05-17T01:02:01.917 に答える