3

私はこの方法でcharポインタを定義しています。

char *s=(char *)malloc(10);

ここに収まる可能性のあるすべての値を入力した後、sに書き込んだものをすべてクリアしたいのですが、mallocを使用せずにsに書き込みたいですか?これどうやってするの?

内容を更新する必要がありますが、最後の反復ですべての値が更新されていない場合は、実行したくない古い値を処理します。

4

3 に答える 3

8

気をつけて!

malloc(sizeof(2*5))malloc(sizeof(int))32ビットシステムと同じで、 4バイトだけを割り当てます。10バイトを割り当てる場合は、を使用しますmalloc(2 * 5)


これが本当に意図したものであった場合にmalloc()備えて、memset(s, 0, 10)またはで割り当てられたメモリをクリアできます。memset(s, 0, sizeof(int))

manmemsetを参照してください。


メモリをクリアする別の方法はcalloc、mallocの代わりに使用することです。これにより、mallocと同じようにメモリが割り当てられますが、メモリもゼロに設定されます。

于 2012-11-19T12:45:43.120 に答える
4

memsetを使用し、メモリブロック内のすべてのバイトをに設定することで、メモリを「クリア」できます0。たとえば、次のようになります。

#define MEMORY_BLOCK 10

//allocate memory
unsigned char* s = malloc(MEMORY_BLOCK);

//... do stuff

//clear memory
memset(s, 0, MEMORY_BLOCK);
于 2012-11-19T12:44:50.070 に答える
3

いくつかの観察:

  • malloc()の戻り値をCでキャストする必要はありません。
  • あなたのmalloc()議論は間違っているように見えます。sizeofこれは演算子であり、関数ではないことに注意してください。引数の型のサイズに評価されます:2 * 5は型intを持っているので、値はおそらく4になります。これはすべての整数式で同じであることに注意してください:sizeof 1は。と同じsizeof 100000000です。

あなたの質問は非常に不明確です。なぜ文字列領域を「クリア」しなければならないと感じるのかを理解するのは簡単ではありません。メモリはメモリであり、最後に書き込んだ内容を保持します。書き込みの間に「クリア」する必要はありません。実際、「クリア」とは、特定の値を書き込んだものにすぎません。

于 2012-11-19T12:46:29.213 に答える