適切な方法でC文字列を空にする

私はC言語のプロジェクトに取り組んできました。通常、私はC ++でプログラムを作成するので、これは単にstring.empty()とは少し異なります。

私はCで文字列を空にする正しい方法は何だろうと思っています。これはそれでしょうか?

buffer[80] = "Hello World!\n";

// ...

strcpy(buffer, "");
35
string.empty()は文字列を変更しません
追加された 著者 David Heffernan,
あなたの例は混乱しています。どうやらバッファは他の場所で宣言されており、リテラルから初期化しようとしています。ここで何かをクリアする必要はありません。
追加された 著者 pmr,

4 答え

それはあなたが "空"という意味に依存します。長さゼロの文字列だけが必要な場合、あなたの例はうまくいくでしょう。

これはまた動作します:

buffer[0] = '\0';

文字列の内容全体をゼロにするには、次のようにします。

memset(buffer,0,strlen(buffer));

これは、最初のNULL文字までゼロにするためにのみ機能します。

文字列が静的配列の場合は、次のように使用できます。

memset(buffer,0,sizeof(buffer));
62
追加された
明確にするために、最後のメソッドは、 buffer isが配列の場合は機能しますが、ポインタの場合は機能しません。コンパイラは配列のサイズを見ることができなければなりません。 buffer がポインタの場合、おそらく4または8バイトのポインタのサイズがゼロになります。
追加された 著者 Tor Klingberg,

Two other ways are strcpy(str, ""); and string[0] = 0

変数の内容を実際に削除するには(上記のスニペットで正しく動作しないコードが汚れている場合は、P)、以下の例のようなループを使います。

#include 

...

int i=0;
for(i=0;i

ダイナミックに割り当てられた文字配列を最初から消去したい場合は、 malloc()とmemset()の組み合わせを使うこともできますが、これはmallocと同じことを行うが、Nullで配列全体を初期化するcalloc()の方が高速です。

やっとあなたのランタイムを念頭に置いて欲しい。 さらに巨大な配列(6桁以上)を扱う場合は、文字列全体を通してmemset()を実行する代わりに、最初の値をNullに設定してください。

最初はもっと汚れて見えるかもしれませんが、より速いです。あなたのコードにもっと注意を払う必要があります;)

私はこれが誰にとっても役立つことを願っています;)

2
追加された

あなたが空にすることの意味に依存します。空の文字列が必要な場合は、

buffer[0] = 0;

すべての要素を0に設定する場合は、do

memset(buffer, 0, 80);
1
追加された

文字列の名前とその長さが必要です すべての文字をゼロにします 他のメソッドは、遭遇した最初のゼロで停止することがあります

    void strClear(char p[],u8 len){u8 i=0; 
        if(len){while(i
0
追加された