web-dev-qa-db-ja.com

C-Stringを空にする適切な方法

私はCのプロジェクトに取り組んできましたが、文字列をいじり回す必要があります。通常、私はC++でプログラムを作成するため、これはstring.empty()を言うこととは少し異なります。

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

 buffer [80] = "Hello World!\ n"; 
 
 // ... 
 
 strcpy(buffer、 "") ; 
40
Benjamin

「空」の意味に依存します。長さゼロの文字列だけが必要な場合は、例が機能します。

これも機能します:

buffer[0] = '\0';

文字列の内容全体をゼロにしたい場合は、次のようにできます。

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

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

文字列が静的配列の場合、次を使用できます。

memset(buffer,0,sizeof(buffer));
77
Mysticial

他の2つの方法はstrcpy(str, "");string[0] = 0

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

#include <string.h>

...

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

動的に割り当てられたcharsの配列を最初からクリアしたい場合は、malloc()とmemset()の組み合わせを使用するか、または-これははるかに高速です-calloc()はmallocと同じことを行いますが、初期化していますNullを含む配列全体。

最後に、ランタイムを念頭に置いてほしい。さらに、巨大な配列(6桁以上)を処理する場合は、文字列全体でmemset()を実行する代わりに、最初の値をNullに設定する必要があります。

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

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

2
Aiyion.Prime

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

buffer[0] = 0;

すべての要素をゼロに設定する場合は、実行します

memset(buffer, 0, 80);
1
Ben Ruijl

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

    void strClear(char p[],u8 len){u8 i=0; 
        if(len){while(i<len){p[i]=0;i++;}}
    }
0
Denes Borsos