尝试从getline分配字符时出现细分错误

时间:2013-05-28 21:14:03

标签: c++ segmentation-fault getline

所以,我正在使用getline(cin, str);然后string text[str.length()];获得句子,然后在for语句中我想要将它们组合起来(text[e] = text[e] + str[i];)我得到了分段错误。完整代码:

#include <cstdlib>
#include <stdio.h>
#include <iostream>

using namespace std;

int main()
{
    string str;
    int i, e, space = 0;

    getline(cin, str);
    string text[str.length()];

    for(i=0; i<str.length(); i++) {
        if(str[i]==' ') {
            space++;
            e++;
        }
        else {
            text[e] = text[e] + str[i];
        }
    }

    return 0;
}

1 个答案:

答案 0 :(得分:5)

e是单元化的,并且它将保持一个可能超出text范围的随机值,从而导致分段错误。这不会将所有变量初始化为零:

int i, e, space = 0;

space初始化为零。改为:

int i = 0, e = 0, space = 0;

或:

int i = 0;
int e = 0;
int space = 0;

据我所知,c ++不支持可变长度数组。