掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
ゼロで初期化された文字列のサイズを知るには? (ID:67069)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
> 確保したメモリ領域よりは、少なくとも小さな領域にしかアクセスしない のであればバッファーオーバーランにはならないのでそこは心配要らない。 何が問題といって、何が何でも動的確保したメモリ領域の頭からしか使えないことがダメ func() { char buf[100]; size_t n=GetLength(buf); } と呼び出せないことになる。使いづらいだけで済めばいいけど、そうもいかない場合がある MapViewOfFile のように、 GlobalAlloc でない方法で確保されたエリアを使いたい場合とか。 struct hoge { DWORD cbSize; // たとえばこんなメンバーやいろんなメンバーがあって ... // 中略 char buf[NNN]; // このバッファへのポインタを渡したい }; があって GlobalAlloc(sizeof (struct hoge)) すると、確保された先頭から buf は存在しない場合とか。 「確保されたバイト数」が本当に必要なの? 呼び出し側がバッファを、後からデータを連結するために大きく取ったりすることはごく普通にありうるわけだけど、 呼び出された側がその全領域に対して処理を行ってはまずいのは自明。 なので「使ってよいサイズ」を呼び出し元側が指定する構成にするほうが多いし、 たぶん構成としてもよい(よいから多用されているわけだ)
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.