CStringからChar配列へコピーするには


ビギナー  2009-12-04 22:51:55  No: 71161

VS2005を使用しています。

CString str1 = "a";
CString str2 = "bb";
CString str3 = "ccc";

と長さ不定の文字列をu_char ucArray[3]の配列にコピーしたいのですが、
どのようにしたら良いでしょうか?
一番セーフティな方法、または色々なパターンを教えて頂けたら幸いです。


仲澤@失業者  2009-12-04 23:01:20  No: 71162

固定長配列であることで既に危険です。実際に[3]では提示の
例で既に足りません(0ターミネート文字が入らない)。
CStringはLPCSTR等に変換するオペレータを持っているので
strcpy()等が使えますが2005以降なら_tcscpy_sを使えと
警告を受けるかも知れません。これがより安全な関数だ
そうです。


ビギナー  2009-12-04 23:16:20  No: 71163

ご回答ありがとうございます。

MS SDKのとある構造体のメンバに、u_char xxx[3]があり、
それにCStringを代入したいのですが、

strcpy( usArray[0], (LPCTSTR)str1 );
と書くと、「'strcpy' : 1 番目の引数を 'u_char' から 'char *' に変換できません」というエラーが出てしまいます。
プログラム初心者でよく分からないので、お手数ですができればサンプル付きでご教授お願いします。


επιστημη  URL  2009-12-04 23:33:33  No: 71164

strcpy 改め _tcscpy 使ってみて。


maru  2009-12-04 23:43:40  No: 71165

u_char xxx[3]にCStringを代入する意図がわかりません。
代入先には本当に文字列を代入する必要があるのですか?
もうすこし、目的をはっきりさせましょう。
何をするために、どの構造体のどのメンバーを使おうとしているかなど。

u_char xxx[3]にCStringの先頭の3文字を代入することは可能ですが、
構造体の使用方法を間違えている可能性があります。


ビギナー  2009-12-05 00:01:32  No: 71166

アドバイスありがとうございます。

επιστημη さま
「'wcscpy' : 1 番目の引数を 'u_char' から 'wchar_t *' に変換できません」というエラーが出てしまいました。

maru さま
>代入先には本当に文字列を代入する必要があるのですか?
CStringの中には数字が入っていて、それをu_char xxx[3]に1つずつ入れたいのですが。

よろしくお願いいたします。


επιστημη  URL  2009-12-05 00:15:42  No: 71167

>「'wcscpy' : 1 番目の引数を 'u_char' から 'wchar_t *' に変換できません」というエラーが出てしまいました。

そりゃそうでしょ。間違ってるんだから。
× _tcscpy( usArray[0], (LPCTSTR)str1 );
○ _tcscpy( &usArray[0], (LPCTSTR)str1 );
○ _tcscpy( usArray, (LPCTSTR)str1 );

てかそもそも u_char てなんですか? unsigned char のこと?
CStringはデフォルトでUNICODEだから2byte幅ですよ?
_TCHAR ucArray[3]; なら末尾の0除いて2文字格納できますがー。


Blue  2009-12-05 00:29:52  No: 71168

>CStringの中には数字が入っていて、それをu_char xxx[3]に1つずつ入れたいのですが。
CString s1(_T("1"));
CString s2(_T("2"));
CString s3(_T("3"));

unsigned char uc[3];
uc[0] = (unsigned char)_tcstoul(s1, NULL, 10);
uc[1] = (unsigned char)_tcstoul(s3, NULL, 10);
uc[2] = (unsigned char)_tcstoul(s2, NULL, 10);

※1 0〜255の範囲チェックをしないと、桁落ちする。
※2 文字列が全て数値であるかのチェックは必要ならすべき。
※3 前後のブランクをどうするか。
※4 空文字の扱い。



επιστημη  URL  2009-12-05 00:50:11  No: 71169

> CStringの中には数字が入っていて、それをu_char xxx[3]に1つずつ入れたいのですが。

ちょっとマテ。んじゃいっちゃん最初の:

> CString str1 = "a";
> CString str2 = "bb";
> CString str3 = "ccc";

は一体なんだったんだと小一時間(ry


ryo  2009-12-05 04:39:25  No: 71170

>CStringはデフォルトでUNICODEだから2byte幅ですよ?
UNICODEが指定されてるなら、

>CString str3 = "ccc";
この時点でエラーが出るような気もします


επιστημη  URL  2009-12-05 04:43:33  No: 71171

UNICODEじゃなかったら

>「'wcscpy' : 1 番目の引数を 'u_char' から 'wchar_t *' に変換できません」

こんなエラー出ねぇっしょ。


ryo  2009-12-05 05:09:58  No: 71172

なるほど、
なら、最初の
CString str3 = "ccc";
これは、実際どうなってんだろう?


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加