アカウント名:
パスワード:
char配列の領域ってプラスヌル文字(char1バイトの場合YYY+1バイト)じゃなかったっけ。sizeof演算子にしても、その変数が確保している領域だから配列がサイズを保持する実装だとサイズもクリアされてしまうような。C言語は中途半端なのでアセンブリ言語に移行したような老害の古い知識ですけど。
長さYYYの文字列に必要な配列長はYYY+1だけど
XXX[YYY]で取った配列にはYYY-1の文字列+YYY番目(0開始でYYY-1のところ)に\0(ヌル文字)が入れられて、配列長自体はYYY、なので
> memset(XXX,0,sizeof(XXX))> memset(&XXX[0],'\0',YYY)
で合ってると思いますよ。
# NULLを設定値にするのはないけどな...いくら(ほとんどの環境で)0のマクロっても...
配列はC的にはこの場合大丈夫# 直接確保できてる保障があるならsizeof(XXX) はありだが...これはこれでポインタにしちゃったやつとか類似なもののトラブルもなくはなく、難しい...
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
UNIXはただ死んだだけでなく、本当にひどい臭いを放ち始めている -- あるソフトウェアエンジニア
C言語はいい加減(老害の偏見) (スコア:0)
char配列の領域ってプラスヌル文字(char1バイトの場合YYY+1バイト)じゃなかったっけ。
sizeof演算子にしても、その変数が確保している領域だから配列がサイズを保持する実装だとサイズもクリアされてしまうような。
C言語は中途半端なのでアセンブリ言語に移行したような老害の古い知識ですけど。
Re: (スコア:0)
また、配列のサイズは配列内には保持しませんので後者の心配も要りません。
sizeofが嫌がられてたのって、誰かが
void hogeInit(char *array) {
memset(array, 0, sizeof(array));
}
とかやらかしたんじゃないですかね……。
Re: (スコア:0)
長さYYYの文字列に必要な配列長はYYY+1だけど
XXX[YYY]で取った配列にはYYY-1の文字列+YYY番目(0開始でYYY-1のところ)に\0(ヌル文字)が入れられて、配列長自体はYYY、なので
> memset(XXX,0,sizeof(XXX))
> memset(&XXX[0],'\0',YYY)
で合ってると思いますよ。
# NULLを設定値にするのはないけどな...いくら(ほとんどの環境で)0のマクロっても...
配列はC的にはこの場合大丈夫
# 直接確保できてる保障があるならsizeof(XXX) はありだが...これはこれでポインタにしちゃったやつとか類似なもののトラブルもなくはなく、難しい...