1. ホーム
  2. c

[解決済み] C言語で配列の全要素をクリアする方法は?

2022-03-04 18:39:10

質問

volatile static uint8_t buffer[16];
void ResetBuffer(){     
   for(int i=strlen((char*)buffer);i>=0;i--) buffer[i]='\0'; 
}

バッファ変数はマイコン内で常に使用する必要があるため、volatile staticとグローバル変数を使っています。 しかし、すべてのバッファをクリアにするために、このようなコードで良いのでしょうか?もし、間違っていたり、他に簡単なコードがあれば、簡単なコードを教えてください。

わかりやすくするならば、最初の要素を空にしてしまえばいいと聞いたことがあります。 でも、そうすると他の要素が残ってしまうんです。

非常に単純な質問であることは承知しています。 しかし、私は混乱しています。普段はC++やJavaでプログラミングをしていたので、Cでプログラミングをするのはかなり戸惑います。

どのように解決するのですか?

を使用しています。 strlen() これは、バッファの内容が有効な文字列であることに依存しており、バッファ全体をクリアしているわけではありません。

ただ memset() と共に sizeof :

memset(buffer, 0, sizeof buffer);

なお sizeof は関数ではないので、このような場合には括弧は必要ない(というか、使うべきだと私は思います)。

C言語ライブラリに memset() もちろん、普通のループでも構いません。

for(size_t i = 0; i < sizeof buffer; ++i)
  buffer[i] = 0;

使用されている部分だけクリアしたい、有効な文字列であることが分かっていれば、あなたのコードはもちろん機能します。私は直感的に理解できないので、逆方向のループは使いませんでしたが、それは私の場合だけです。

注:このバッファが文字列用である場合、型は char ではなく uint8_t .