3

私はまだCの初心者ですが、memset機能に問題があります。

char *を関数に渡し、この関数内で配列を作成してから、memsetを使用して各値を設定します。私はdbxを使用して、この変数が関数に入るのを監視してきましたが、memsetを渡すと、何らかの理由で「」に設定されます。

まず、なぜこれが起こるのですか?memsetがchar*が配置されているメモリをリセットしている必要があると思いますか?

次に、各要素を「0」に設定するためのより良い方法はありますか?

これが私のコードです:

static char *writeMyStr(char *myStr, int wCount) {

   // here myStr is set to "My String is populated"  

   char **myArr;
   myArr = (char **) malloc(sizeof(char *) * wCount);
   memset(myArr, 0, sizeof(char *) * wCount);   // myStr is set to ""

   ... populate array ... 

}
4

2 に答える 2

11

あなたはゼロの文字を探していますか、それともゼロの数字を探していますか?配列をそのように初期化する場合:

memset(arr, 0, count);

と同等です

memset(arr, '\0', count);

なぜなら0=='\0'。文字列の長さは最初のヌルターミネータの位置です。したがって、文字列を支える配列はゼロで埋められるため、文字列の長さはゼロになります。人々がこれを行う理由は、文字列に何かを追加するときに、それを再度nullで終了する必要がないようにするためです。

文字列を「0000」にしたい場合は、文字ゼロを使用します。

memset(arr, '0', count);

ただし、nullで終了することを忘れないでください。

arr[count-1] = '\0';
于 2012-07-17T19:06:29.253 に答える
2

最初に配列をゼロで埋めようとしている場合は、mallocではなくcallocを使用することをお勧めします。

すべてのmallocは、ランダムで不確定な値を持つメモリのブロックを提供します。callocはメモリのブロックを提供し、それをゼロで埋めますが、そこにジャンクがないことを保証します。

于 2012-07-17T18:59:07.710 に答える