C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: std::stringの値がおかしい


(過去ログ 59 を表示中)

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■34240 / inTopicNo.1)  std::stringの値がおかしい
  
□投稿者/ 門倉 雄大 (1回)-(2009/03/24(Tue) 10:23:55)

分類:[C/C++] 

初めまして。
宜しくお願いします。

C++2003でWin32アプリケーションの開発をしています。
テキストファイルを読み込んで自動で編集し、別のテキストファイルに出力するプログラムです。
普段は上手く処理が回るのですが、特定のファイルを読み込むと落ちてしまいます。
F10で一行ずつ実行していきながら値の動きを確認していくと、

1.std::string strTrm;

2.strTrm = strImpData.substr(10,30);
3.strTrm.erase(0,1);

という部分の3で値がおかしくなってしまいます。
上記は取り込んだ文字列の先頭一文字を削除して保持するという部分なのですが、2のタイミングでちゃんとstrImpData.substr(10,30)の値が入ってくれるのに3になった途端、値が
"rerNotifyWindow32"という表示になり、その後でハッシュのようなよくわからない文字列が続いています。
ネットで"rerNotifyWindow32"で調べてもヒットせず困っています。
"errNotify"なら少しは出るのですが表示されるのは"rerNotify"です。
どなたか原因がわかる方宜しくお願いします。
引用返信 編集キー/
■34241 / inTopicNo.2)  Re[1]: std::stringの値がおかしい
□投稿者/ επιστημη (1843回)-(2009/03/24(Tue) 10:37:02)
επιστημη さんの Web サイト
2009/03/24(Tue) 10:41:37 編集(投稿者)

どんな文字列食わすとおかしくなっちゃうですか?
# その文字列は10文字以上あるんですよね?

2と3まとめて substr(11,29) だとどうです?

引用返信 編集キー/
■34242 / inTopicNo.3)  Re[2]: std::stringの値がおかしい
□投稿者/ 門倉 雄大 (2回)-(2009/03/24(Tue) 10:41:55)
No34241 (επιστημη さん) に返信

お返事ありがとうございます。

> どんな文字列食わすとおかしくなっちゃうですか?

今はテスト中なので簡単な日記や歌詞のようなものを読み込ませてます。
例えば落ちた例として、

「世界に一つだけの花 EOL
 ひとつひとつ違う種を持つ EOL
 その花を咲かせる事だけに一生懸命になればいい EOL
 小さい花や大きな花 EOL
 ひとつとして同じモノはないから EOL
 」
EOLは改行です。

> # その文字列は10文字以上あるんですよね?

必ずあります。

引用返信 編集キー/
■34244 / inTopicNo.4)  Re[2]: std::stringの値がおかしい
□投稿者/ 門倉 雄大 (3回)-(2009/03/24(Tue) 11:30:15)
No34241 (επιστημη さん) に返信

追記:

> > 2と3まとめて substr(11,29) だとどうです?

2までは上手くいっていたんで、substr(11,29)でも上手くいきました。
しかし、その下でstrTrm.clear()をすると同じ現象になります。
どうも、strImpDataから値を受け取った後でstrTrm自身に何かしようとするとrerNotifyWindow32になるようです。
しかし、参照するだけ(例えば string aaa = strTrm)のような形ならば問題がないようです。
もしかしてslnが壊れている可能性もあるのでしょうか?
ただ他のテキストファイルだとその部分もちゃんと回るのですが。
引用返信 編集キー/
■34247 / inTopicNo.5)  Re[3]: std::stringの値がおかしい
□投稿者/ επιστημη (1844回)-(2009/03/24(Tue) 12:17:24)
επιστημη さんの Web サイト
2009/03/24(Tue) 12:17:40 編集(投稿者)
再現しませんねぇ...

#include <string>
#include <iostream>

using namespace std;

int main() {
  const char* data[] = {
    "世界に一つだけの花",
    "ひとつひとつ違う種を持つ",
    "その花を咲かせる事だけに一生懸命になればいい",
    "小さい花や大きな花",
    "ひとつとして同じモノはないから",
    0
  };
  string trim;
  for ( int i = 0; data[i]; ++i ) {
    string input = data[i];
    trim = input.substr(9,31);
    trim.erase(0,1);
    cout << '[' << trim << ']' << endl;
    trim.clear();
  }
}

--- 実行結果 ---
[だけの花]
[つ違う種を持つ]
[かせる事だけに一生懸命になれば]
[大きな花]
[て同じモノはないから]

どっか別のとこで領域破壊かなんか起こしてんじゃないんかなぁ...

引用返信 編集キー/
■34258 / inTopicNo.6)  Re[4]: std::stringの値がおかしい
□投稿者/ Jitta on the way (292回)-(2009/03/24(Tue) 19:26:56)
No34247 (επιστημη さん) に返信
> 2009/03/24(Tue) 12:17:40 編集(投稿者)
>
> 再現しませんねぇ...
>
> #include <string>
> #include <iostream>
>
> using namespace std;
>
> int main() {
> const char* data[] = {
> "世界に一つだけの花",
> "ひとつひとつ違う種を持つ",
> "その花を咲かせる事だけに一生懸命になればいい",
> "小さい花や大きな花",
> "ひとつとして同じモノはないから",
> 0
> };
> string trim;
> for ( int i = 0; data[i]; ++i ) {
> string input = data[i];
> trim = input.substr(9,31);
> trim.erase(0,1);
> cout << '[' << trim << ']' << endl;
> trim.clear();
> }
> }
>
> --- 実行結果 ---
> [だけの花]
> [つ違う種を持つ]
> [かせる事だけに一生懸命になれば]
> [大きな花]
> [て同じモノはないから]
>
> どっか別のとこで領域破壊かなんか起こしてんじゃないんかなぁ...
>

SJIS をエンコード指定なしに読み込んで…ウォッチしたなら気付くか...
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -