0
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;

int main()
{
    string token = "000000:::AAAA:::000011:::Hello 8:::::::D Jay!";
    string * stringArray = new string[token.size()]; 
    string interim;
    int r = 0;
    int arrayCounter = 0;

    for(int x = 0; x < token.length(); x++)
    {
        if(token[x] != ':')
        {

            interim[r] = token[x];
            r++;
        }
    }

    for (int x = 0; x < r; x++)
    {
        cout << interim[x] << endl;

    }

    system("pause");
    return 0;
}

私は新しくて学んでおり、次の行に絞り込みました。

            interim[r] = token[x];

..しかし、なぜクラッシュするのかわかりません。アドバイス?Visual C++ VSE2012 でコーディングしています

4

1 に答える 1

1

文字列interimのサイズはゼロです。設定は、そのサイズを変更せずinterim[r] = token[x]に文字列を locationで変更します。rサイズがゼロの場合、これは未定義の動作です。

interim += token[x]おそらくあなたが望むものです。

例:

#include <iostream>
#include <string>
using namespace std;

int main()
{
    string token = "000000:::AAAA:::000011:::Hello 8:::::::D Jay!";
    string interim;

    for(int x = 0; x < token.length(); x++)
    {
        if(token[x] != ':')
        {
            interim += token[x];
        }
    }

    cout << interim << endl;

    system("pause");
    return 0;
}

出力:

000000AAAA000011Hello 8D Jay!
Press any key to continue . . .
于 2013-06-09T17:06:22.547 に答える