2011-11-12 14 views
31

私はCで文字列を大量に扱う必要があるプロジェクトに取り組んできました。通常、私はC++でプログラムを作成するので、これは単にstring.empty()とは少し異なります。C-Stringを空にする適切な方法

Cで文字列を空にするにはどうすればよいのでしょうか?

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

// ... 

strcpy(buffer, ""); 
+0

あなたの例は混乱しています。どうやらバッファは他の場所で宣言されており、リテラルから初期化しようとしています。ここで何かをクリアする必要はありません。 – pmr

+1

string.empty()は文字列 –

答えて

55

行うことができます。長さゼロの文字列だけが必要な場合、あなたの例はうまくいくでしょう。

これも動作します:

buffer[0] = '\0'; 

あなたは文字列の内容全体をゼロにしたい場合は、あなたがこのようにそれを行うことができます。

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

が、これが唯一のアップゼロのために動作します最初のNULL文字に変換します。

文字列は静的な配列である場合は、あなたが使用することができます。

memset(buffer,0,sizeof(buffer)); 
+2

を変更しません。明確にするために、最後のメソッドは 'buffer'が配列の場合は機能しますが、ポインタの場合は機能しません。コンパイラは配列のサイズを見ることができなければなりません。'buffer'がポインタであれば、おそらく4または8バイトのポインタのサイズをゼロにします。 –

1

空の意味によって異なります。あなただけの空の文字列をしたい場合は、それはあなたが「空」で何を意味するかによって異なりますがゼロにすべての要素を設定したい場合は、

buffer[0] = 0; 

を行う

memset(buffer, 0, 80); 
2

他の二つの方法が本当にあなたがいない汚いコードを持っている場合に、変数の内容を(削除するにはstrcpy(str, "");string[0] = 0

です上記のスニペットで正しく動作します:P)以下の例のようにループを使用します。

あなたは(malloc関数の組み合わせを使用することのいずれか 、最初から文字を動的に割り当てられた配列をクリアしたい場合には
#include <string.h> 

... 

int i=0; 
for(i=0;i<strlen(string);i++) 
{ 
    string[i] = 0; 
} 

)およびmemsetの()または - これは道より高速である - はcalloc()はmallocと同じことをしますが、Nullで配列全体を初期化します。

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

最初は汚れて見えるかもしれませんが、速くなります。 他の方法は、最初のゼロで停止する可能性のあるすべての文字をゼロにします)文字列とその長さ の

0

ニーズの名前を、私はこれは誰のために有用であった期待し

);あなたは自分のコードにもっと注意を払う必要があります彼らは遭遇する

void strClear(char p[],u8 len){u8 i=0; 
     if(len){while(i<len){p[i]=0;i++;}} 
    } 
関連する問題