LPCWSTR data = L"100,200";
のdataから
printf("%s",data);
とやったのですが、表示結果は先頭の「1」としか出ませんでした。
これは普通に文字列として使うことはできないのでしょうか?
またこのdata変数から100と200だけを取り出したいのですが
標準関数に指定の文字まで読み込む,というのが
なかったのですが良い方法はありますでしょうか。
環境はvisual studio 2010 C++になります。
よろしくお願いします。
LPCWSTR変数の扱いについて
Re: LPCWSTR変数の扱いについて
書式指定と、それに対応する実引数の型が異なるために未定義の動作を引き起こしているのが原因です。マカロニ さんが書きました:LPCWSTR data = L"100,200";
のdataから
printf("%s",data);
とやったのですが、表示結果は先頭の「1」としか出ませんでした。
これは普通に文字列として使うことはできないのでしょうか?
printf("%ls", data);
とすれば問題は解消します。
なお、文字列dataに日本語などが含まれる場合には、適切にロケールを設定してください。
100や200は文字列として取得するのでしょうか?マカロニ さんが書きました:またこのdata変数から100と200だけを取り出したいのですが
標準関数に指定の文字まで読み込む,というのが
なかったのですが良い方法はありますでしょうか。
環境はvisual studio 2010 C++になります。
よろしくお願いします。
その場合、文字数は3文字に決まっているのでしょうか?
いずれにせよ、sscanfやswscanfで実現することができます。
具体的にはこんな感じです。
あるいは、wcscspnやwcschrなどで細かく制御してもよいでしょう。
- bitter_fox
- 記事: 607
- 登録日時: 14年前
- 住所: 大阪府
Re: LPCWSTR変数の扱いについて
LPCWSTR型はWCHAR型のポインタ型で、WCHAR型はワイド文字を扱う型です。(ワイド文字は多くの場合ユニコードで表されます。)マカロニ さんが書きました:LPCWSTR data = L"100,200";
のdataから
printf("%s",data);
とやったのですが、表示結果は先頭の「1」としか出ませんでした。
これは普通に文字列として使うことはできないのでしょうか?
またこのdata変数から100と200だけを取り出したいのですが
標準関数に指定の文字まで読み込む,というのが
なかったのですが良い方法はありますでしょうか。
環境はvisual studio 2010 C++になります。
よろしくお願いします。
仮にユニコードとすれば、このサイトを参考にすると、
0が0x0030
1が0x0031となります。
printf関数のフォーマット指示に%sを指定した場合は、\0が出てくるまで出力をしますので、もしこの文字列がリトルエンディアンで保存されていると
0x31003000・・・となり
実際に出力されるのは0x31だけであり、この0x31はASCII文字コードでも1を示しますので偶然にも1だけが出力されたことになります。
この問題を解決するにはフォーマット指示に%lsを指定してください。
http://www.trickpalace.net/cppll/reference/printf.htm
またその他の関数については、wchar.hに定義されている関数を使用してください。
http://www.c-tipsref.com/reference/wchar.html
[hr][修正]
マクロ->関数
一バイト文字でも->ASCII文字コードでも
Re: LPCWSTR変数の扱いについて
たかぎさん、bitter_foxさんありがとうございました。
char型とはまた違った扱いで勉強になりました。
ヘッダーファイルを参照することも大切ですね
助かりました。
char型とはまた違った扱いで勉強になりました。
ヘッダーファイルを参照することも大切ですね
助かりました。