例えば
私はチャーを持っていますstr[1024];
memset(str,0,1024);
そして、私は後でやります
これでいいですか?または私はこれを行う必要があります:
char* str = new char[1024];
ありがとう。
例えば
私はチャーを持っていますstr[1024];
memset(str,0,1024);
そして、私は後でやります
これでいいですか?または私はこれを行う必要があります:
char* str = new char[1024];
ありがとう。
どちらもスペースを割り当てるので、どちらも memset で動作します。両者の違いは、スペースが割り当てられる場所にあります。
char str[1024];
スタックに文字列を割り当て、範囲外になると消えます。
char* str = new char[1024];
文字列をヒープに割り当て、delete[] するまで永久に残ります。
直接的な答え:いいえ。
より良い答え: C++ で memset を使用しないでください。正直なところ、C で memset を使用するべきではないでしょう。少なくとも、一般的に使用されるすべてのことについてはそうではありません。ただし、特に C++ では、すべてのバイトを 0 に設定することは、変数を "空白" にするための正しい方法とは限りません....配列であってもです。これは技術的にはCにも当てはまりますが、memsetには何十年にもわたる悪用が背後にあります...誰も別の動作をする実装を作成するつもりはありません。
@HostileFork がすでに指摘しているように、おそらくここが必要std::string
です。何をしていても特に文字列のようなものではない場合は、std::vector<char> str(1024);
代わりに必要になる場合があります。
いずれにせよ、あなたが望んでいないことは確かですnew char[1024]
(C++ の初期の時代からの残り物であり、他の機能が存在する場合、おそらく言語にはまったく含まれていないでしょう)、おそらくどちらも望んchar str[1024];
でいませんが、少なくともこれは重大な間違いではない可能性があります。
str
文字配列にingを格納し、それらを設定することmemset
は、慣用的なC++ではありません。
(注:慣用句という言葉をよく使用します。)
私がどんなに壊れた記録であるかについて言えば、私はあなたにビャーネ・ストロヴルプによるこの短い論文を読むことを懇願します:
StackOverflowのベテランに、あなたが扱っている質問のコンテキストをもっと見せることを(あまりにも)恐れないでください。彼らが提案するコードのクールな再想像力と改善に驚かれるかもしれません...
これをより多くの答えにするために、あなたの宣言はおそらく次のように読むべきです:
std::string str;
サイズを管理する必要はなく、値で呼び出し元のスコープに返す(または返さない)ことができます。