53

私はCでプロジェクトに取り組んでおり、文字列を何度もいじる必要があります。通常、私はC ++でプログラムを実行するので、これは単にstring.empty()と言うのとは少し異なります。

Cで文字列を空にする適切な方法は何でしょうか。これでしょうか。

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

//..。

strcpy(buffer、 "");
4

6 に答える 6

109

それはあなたが「空」とはどういう意味かによります。長さゼロの文字列が必要な場合は、例が機能します。

これも機能します:

buffer[0] = '\0';

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

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

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

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

memset(buffer,0,sizeof(buffer));
于 2011-11-12T21:55:54.487 に答える
3

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

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

#include <string.h>

...

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

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

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

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

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

于 2014-04-03T05:31:23.167 に答える
1

空にすることの意味によって異なります。空の文字列が必要な場合は、

buffer[0] = 0;

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

memset(buffer, 0, 80);
于 2011-11-12T21:54:45.127 に答える
1

文字列を受信するものの受信バッファをクリアしようとしている場合、私が見つけた最善の方法は、上記のようにmemsetを使用することです。その理由は、次に受信する文字列がいくら大きくても(もちろん、バッファのsizeofに制限されます)、事前にゼロ調整されたバッファに書き込まれると、自動的にasciiz文字列になります。

于 2020-01-12T01:30:04.983 に答える
1

私は初心者ですが...私の知る限り、最善の方法は

strncpy(dest_string,"",strlen(dest_string));
于 2020-06-04T10:47:17.843 に答える
-1

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

    void strClear(char p[],u8 len){u8 i=0; 
        if(len){while(i<len){p[i]=0;i++;}}
    }
于 2016-10-24T08:02:29.770 に答える