以下のようにstreamで読み書きしているとプログラム終了時にエラーになってしまいます。このエラーを出ないようにしたいのですが、よく分からず。
c++
1CString w_str("文字"); 2CString r_str; 3stringstream st; 4iostream io(st); 5int size = w_str.GetLength() * sizeof(TCHAR); 6io.write(w_str.GetString(), size); 7io.read((const*)&r_str, size);
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
ベストアンサー
C++
1#include <atlstr.h> 2#include <sstream> 3#include <iostream> 4 5using tstringstream = std::basic_stringstream<TCHAR, std::char_traits<TCHAR>, std::allocator<TCHAR>>; 6using tostream = std::basic_ostream<TCHAR, std::char_traits<TCHAR>>; 7using tistream = std::basic_istream<TCHAR, std::char_traits<TCHAR>>; 8 9int main() 10{ 11 CString w_str("文字列"); 12 CString r_str; 13 int size = w_str.GetLength() + 1; 14 15 tstringstream s; 16 tostream& os(s); 17 os.write(w_str.GetString(), size); 18 19 tistream& is(s); 20 is.read(r_str.GetBuffer(size), size); 21 r_str.ReleaseBuffer(); 22 23 return 0; 24}
文字セット
の設定がUNICODE時にstringstream
が文字化けしていてもいいなら以下でも通りますが…
C++
1#include <atlstr.h> 2#include <sstream> 3#include <iostream> 4 5int main() 6{ 7 CString w_str("文字列"); 8 CString r_str; 9 int size = (w_str.GetLength() + 1) * sizeof(TCHAR); 10 11 std::stringstream s; 12 std::ostream& os(s); 13 os.write((const char*)w_str.GetString(), size); 14 15 std::istream& is(s); 16 is.read((char*)r_str.GetBuffer(size), size); 17 r_str.ReleaseBuffer(); 18 19 return 0; 20}
投稿2020/09/24 11:21
編集2020/09/24 11:27総合スコア4079
0
std::string なら何の問題もないんですが、CStringを使いたい事情があるんですか?
C++
1#include <atlstr.h> 2#include <sstream> 3#include <string> 4#include <iostream> 5 6int main() { 7 CString w_str("文字列"); 8 CString r_str; 9 10 std::string w_str_ = w_str; 11 12 std::stringstream s; 13 s << w_str; 14 15 std::string r_str_; 16 s >> r_str_; 17 r_str = r_str_.c_str(); 18 19 std::cout << '[' << r_str << "]\n"; 20 21 return 0; 22}
投稿2020/09/24 10:45
総合スコア16612
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
はい、できれば、CStringで使いたいんです。どうにかできないか、試行錯誤中です。最後のエラーさえ出なければうまくいっているのですが。
教えて頂いた、std::stringでの方法も見て参考にさせていただきます。
ありがとうございます。
2020/09/24 11:15
答えになっていない。CStringを使いたい"理由"を問うているのだが?
僕の回答のように、処理の途中はstd::stringで通すこともできるのだし。
退会済みユーザー
2020/09/24 11:34
それでもいいのですが、
CSringでエラーになるのが気になるんです。
なぜエラーになるのか。
もちろん、動かすだけなら、教えていただいた方法で十分です。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/09/24 11:49