1

ユーザー入力を受け取り、入力内容を文字列の配列に入れたいと思います。各文字を読み取り、各単語を空白で区切ってほしい。私はそれをまともにしようとしましたが、これは正しくコーディングされていないと確信しています。セグメンテーション違反エラーが発生し、エラーを発生させずにこれを行うにはどうすればよいか疑問に思っていました. これが私が持っているコードです。

#include <iostream>

using namespace std;

void stuff(char command[][5])
{ 
    int b, i = 0;
    char ch;
    cin.get(ch);

    while (ch != '\n')
    {
        command[i][b] = ch;
        i++;
        cin.get(ch);
        if(isspace(ch))
        {
            cin.get(ch);
            b++;

        }

    }
    for(int n = 0; n<i; n++)
    {
        for(int m = 0; m<b; m++)
            {
            cout << command[n][m];
            }
    }

}

int main()
{
    char cha[25][5];
    char ch;
    cin.get(ch);
    while (ch != 'q')
    {
        stuff(cha);
    }

    return 0;
}
4

1 に答える 1

1

bは初期化されていないため、最初にインデックスとして使用されたときにランダムな値になります。初期化bして、配列インデックスが配列の境界を超えないようにします。

std::vector<std::string>または、 andを使用して、operator>>()配列インデックスを忘れます。

std::string word;
std::vector<std::string> words;
while (cin >> word && word != "q") words.push_back(word);
于 2012-12-09T09:14:53.287 に答える