私はこのようなバッファを作成しますが、私はそれに内容を与えません。次に、このブロックメモリのstrlen()を表示しようとします。私は何を得る割り当てられたポインタのStrlen()
int size = 24;
char *c;
c = (char *)malloc(size);
printf("%d\n", strlen(c));
は私がC [47]に[40] Cからの値を表示しようと、私は常に\ 0を取得しますが、Cの後に[47]はもはやnullではない24が、40ではありません。 サイズ= 18に設定すると、結果は40になりません。それは32です。そして、c [32]からc [47]までの値はすべて\ 0です。 サイズを7に設定すると、結果は24になり、c [24]〜c [47]の値はすべて\ 0になります。
私はmalloc()関数で使用したサイズを私に与えることができないような配列のためにstrlenを使うことを知っています。 私はちょうどこれがなぜ起こったのか、サイズの値を変更したとき、結果がどのように変化するのでしょうか?これを使って対処できるものはありますか?
編集:誰もが結果が予測できないと思うようです。それは常に8の倍数であり、サイズを大きくすると結果が大きくなるという限界があります。結果の変更を行うサイズの値を正確に判断でき、何回テストしても変化しません。それはOSだけでなく、C言語やコンパイラに依存していますか?なぜ8が選ばれるのですか?
未定義の動作、end of、case closed !! –
サイドノート:[mallocの結果をキャストしない](http://stackoverflow.com/q/605845/1233251) –