VS2005を使用しています。
CString str1 = "a";
CString str2 = "bb";
CString str3 = "ccc";
と長さ不定の文字列をu_char ucArray[3]の配列にコピーしたいのですが、
どのようにしたら良いでしょうか?
一番セーフティな方法、または色々なパターンを教えて頂けたら幸いです。
固定長配列であることで既に危険です。実際に[3]では提示の
例で既に足りません(0ターミネート文字が入らない)。
CStringはLPCSTR等に変換するオペレータを持っているので
strcpy()等が使えますが2005以降なら_tcscpy_sを使えと
警告を受けるかも知れません。これがより安全な関数だ
そうです。
ご回答ありがとうございます。
MS SDKのとある構造体のメンバに、u_char xxx[3]があり、
それにCStringを代入したいのですが、
strcpy( usArray[0], (LPCTSTR)str1 );
と書くと、「'strcpy' : 1 番目の引数を 'u_char' から 'char *' に変換できません」というエラーが出てしまいます。
プログラム初心者でよく分からないので、お手数ですができればサンプル付きでご教授お願いします。
strcpy 改め _tcscpy 使ってみて。
u_char xxx[3]にCStringを代入する意図がわかりません。
代入先には本当に文字列を代入する必要があるのですか?
もうすこし、目的をはっきりさせましょう。
何をするために、どの構造体のどのメンバーを使おうとしているかなど。
u_char xxx[3]にCStringの先頭の3文字を代入することは可能ですが、
構造体の使用方法を間違えている可能性があります。
アドバイスありがとうございます。
επιστημη さま
「'wcscpy' : 1 番目の引数を 'u_char' から 'wchar_t *' に変換できません」というエラーが出てしまいました。
maru さま
>代入先には本当に文字列を代入する必要があるのですか?
CStringの中には数字が入っていて、それをu_char xxx[3]に1つずつ入れたいのですが。
よろしくお願いいたします。
>「'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文字格納できますがー。
>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 空文字の扱い。
・
・
・
> CStringの中には数字が入っていて、それをu_char xxx[3]に1つずつ入れたいのですが。
ちょっとマテ。んじゃいっちゃん最初の:
> CString str1 = "a";
> CString str2 = "bb";
> CString str3 = "ccc";
は一体なんだったんだと小一時間(ry
>CStringはデフォルトでUNICODEだから2byte幅ですよ?
UNICODEが指定されてるなら、
>CString str3 = "ccc";
この時点でエラーが出るような気もします
UNICODEじゃなかったら
>「'wcscpy' : 1 番目の引数を 'u_char' から 'wchar_t *' に変換できません」
こんなエラー出ねぇっしょ。
なるほど、
なら、最初の
CString str3 = "ccc";
これは、実際どうなってんだろう?
ツイート | ![]() |