掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
文字列のポインタ変数の受け渡し (ID:50986)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
> ret=TestFunc(&szBuf); 配列の場合は、変数名だけでポインタと同じ扱いですから、 ret=TestFunc(szBuf); です。 C, C++の場合、確かにポインタ変数はデータの最初のアドレスですが、 その中身まで自動的に確保してくれる訳ではありません。 char szBuf; はchar型の変数(1バイト)を確保したにすぎません。これに文字列を 書き込むとメモリ上は書き込まれますが、管理下におかれているのは あくまで確保した1バイトだけであって、それ以降のデータはその後 どうなろうが全く保証されません。同じ関数内では大丈夫だったとい うのは、たまたま文字列の入ったメモリ状態がそのまま残っていたに すぎないということです。 ですから書き方としては、すでに出ているように char szBuf[MAX]; MyFunc(szBuf); で問題ありません。szBufに格納できる文字列の長さは最後に \0 が入 ることを考慮して、MAX - 1 バイトまでということになります。 GetModuleFileName()で取得する場合も、きちんとバッファを確保して ください。この関数の第3引数でバッファのサイズを指定するように なっているのも、第2引数で渡すバッファに確保されたメモリの大き さを超えないようにするためのものです。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.