人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

環境VC++6 関数の中でcharのエリア確保・文字列設定を行い、
戻ってきた値を、
CString型に変換しようと考えています。
それで以下のようなコードを作成したのですが、
5行目のcsTxt=*pでこけてしまいます。
このコーディングの問題点を教えてください。

01行目:main(){
02行目: char* p
03行目: createStr(p)
04行目: CString csTxt;
05行目: csTxt=*p;
06行目: delete p
07行目:}
08行目:
09行目:void createStr(char* result){
10行目:
11行目: CString csfile;
12行目: csfile="Sample";
13行目: result = (char*)malloc(csfile);
14行目: strcpy(result,csfile);
15行目:}

●質問者: harunoharuno
●カテゴリ:コンピュータ
✍キーワード:Char DELETE malloc VC++ void
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● GoldenDawn
●27ポイント

MFC はよく分かりませんが、

http://www.gcc.ne.jp/~narita/soft/lib/CString/reference/index.ht...

CString& operator = ( const CString& s );

CString& operator = ( LPCSTR lpsz );

とあるので、ポインタのまま

csTxt = p ;

ではどうですか。

◎質問者からの返答

以下のようなメッセージがでて落ちました。サンプルをより実コーディングに近いものにします

Dumping objects ->

{160} normal block at 0x00AB2D10, 1 bytes long.

Data: < > 00

{159} normal block at 0x00AB2E70, 1 bytes long.

Data: < > 00

strcore.cpp(118) : {152} normal block at 0x00AB2590, 126 bytes long.

Data: < S q L:\ > 01 00 00 00 53 00 00 00 71 00 00 00 4C 3A 5C 83

strcore.cpp(118) : {147} normal block at 0x00AB2A40, 20 bytes long.

Data: < defa> 01 00 00 00 07 00 00 00 07 00 00 00 64 65 66 61

strcore.cpp(118) : {146} normal block at 0x00AB2A80, 23 bytes long.

Data: < Samp> 01 00 00 00 0A 00 00 00 0A 00 00 00 53 61 6D 70


2 ● GoldenDawn
●27ポイント
result = (char*)malloc(csfile.Len()) ;

では?


http://q.hatena.ne.jp/


3 ● yo-kun
●100ポイント ベストアンサー

createStrは実装者の意図としては内部で確保した領域のポインタを取得したいのでしょうからこのままではダメです。

このままでは呼び出し側でchar*の値は変わりませんから。


解決策1・ポインタを参照渡しにする

09行目を

void createStr(char*& result){

こうして参照渡しにすればいけると思います。


解決策2・ポインタのポインタを渡す

createStrの実装を

void createStr(char** result){

CString csfile;

csfile="Sample";

*result = (char*)malloc(csfile.GetLength());

strcpy(*result,csfile);

}

こうして

createStr( &p );

と呼び出すといけると思います。


URLはダミーです

http://q.hatena.ne.jp/answer

◎質問者からの返答

これです。解決策2をとりました。ポインタを参照渡しする方法もあるんですね。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ