トップページ > 過去ログ > 記事閲覧
KeyInputString等の引数に用いるchar型の配列
名前:まろ 日時: 2011/08/11 00:24

当方C++の初心者なのですが、KeyInputString等の関数にchar型の配列を引数として与えるようなプログラムを作成した場合、この引数をC++のstring型で与えるようなプログラムを書く事は出来るのでしょうか? 可変長の配列を与えられればプログラムを書くのに楽になるかと考えて、 string name; KeyInputString( 0 , 16 , 30 , name.c_str() , FALSE ) ; のような処理をやらせたいのですが、変数への入力にはこのような処理は出来ないのでしょうか

Page: 1 |

Re: KeyInputString等の引数に用いるchar型の配列 ( No.1 )
名前:クラスクラス 日時:2011/08/11 06:54

ある条件では、運良く動くかもしれないけど、 基本的に問題が起こります。  ↓こうしないと string name; char wstr[40]; KeyInputString( 0 , 16 , 30 , wstr , FALSE ) ; name = wstr;
Re: KeyInputString等の引数に用いるchar型の配列 ( No.2 )
名前:Will 日時:2011/08/11 09:28

c_str()の戻り値は「const char*」なので、そのポインタは文字列のリード以外で使用してはいけません。 c_str()で取得したポインタに対して書き込みを行った場合、メモリの動的確保が適切に行われないためメモリ破壊を引き起こす可能性が非常に高いです。
Re: KeyInputString等の引数に用いるchar型の配列 ( No.3 )
名前:まろ 日時:2011/08/11 12:49

お二方ともありがとうございます。 やはり基本的には静的にメモリ確保したものを利用しないとよくないという事ですね。 よく分からないまま、 KeyInputString( 0 , 16 , 30 , (TCHAR *)name.c_str() , FALSE ) ; のように書いた所、DrawString関数で表示を行う事が出来てしまったため、もしかしたら出来るのかな?と思い質問させていただきました。 (constに対する処理は打ち消されると思っていたため) 偶然動きはしたものの、stringの長さは0のままだったりと挙動がおかしかったので、素直にchar型の配列を使おうと思います。 やはりポインタは便利なようで難しいですね。

Page: 1 |