掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
文字列のポインタ変数の受け渡し (ID:50985)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
SSさん、Wandereさんご教授ありがとうございます。 さて、簡単な方からTestしてみました。 質問2.自アプリのパスの取得 GetModuleFileName()で取得できました。 で、SSさんのご指摘もありますので、本命のポインタ引数の受け渡しの実験も かねて関数作ってみました。 /////呼び出し側/////// case IDM_GETMYPATH: char szBuf2; SelfPath(&szBuf2); MessageBox(hWnd,&szBuf2,"SelfPathポインタ渡し",MB_OK); break; //////////////関数////////////////// void SelfPath(char *szPath) { int ret; ret=GetModuleFileName(NULL,szPath,MAX_SIZE); //MAX_SIZEは255 } 結果、正常にパスを取得する事が出来ました。 これも、呼び出し側でメモリ領域の確保はしてないですが、正常に結果が戻りました。 質問2-1 これはGetModuleFileNameの引数内で、MAX_SIZEを指定しているから、この段階で 自動的に、メモリ領域が確保されたと考えていいのでしょうか? 質問1 ポインタの受け渡し ですが、 >char szBuf[100];とか確保して、szBufをポインタとして渡す必要があります。 は、納得です。が、具体的にどう書けばいいのでしょうか? char szBuf[MAX_SIZE]; ret=TestFunc(&szBuf); では当然ダメでした。「'char (*)[255]' から 'char *' に変換できません。」 ちなみに最初UPしたソースでも、関数内で wsprintf(szPath,"%s","C:\\WINDOWS\\Application Data\\BabyData"); MessageBox(0,(LPCSTR)szPath,"TestFunc",MB_OK); とやると、正常にMsgBoxにパスが表示されます。この段階でメモリ領域は確保 出来てはいないのでしょうか??? で、戻るポインタ変数は最初のデータのアドレスになると理解していたのですが。 甘えるなといわれそうですが、呼び出し側で、確保する方法でも、関数内で 確保する方法でも結構ですので、サンプルをお願いできませんでしょうか? C、C+;ではこのような手法は普通使わないのですか?VBでは、参照渡しでは ありますがたまに使いますが・・。 もし、いわゆる定石的な方法で無いならその点も合わせてご指摘ください。 (文字列を渡して、処理を加えて戻す関数作成の際に必須と思うので) 宜しくお願い致します。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.