【问题标题】:C++ string array scope problemC++字符串数组作用域问题
【发布时间】:2011-07-14 07:22:44
【问题描述】:

在下面的代码中,cout 正在输出正确的字符串数组。不幸的是,在代码的其他地方(仍然在同一个函数中,因此不是范围错误)cout << rs[i] 其中0<i<5 和i 是int,输出一个空格。帮助将不胜感激。

int N;
inp >> N;
string a[N]; //For matchee
string b[N]; //For matcher
string rs[N]; //For reflection
for(int i=0; i<N; i++) {
    inp >> a[i];
}
for(int i=0; i<N; i++) {
    inp >> b[i];
}
/*Build the reflection matrix*/
bool reflectCorrect = 1;
for(int i=0; i<N; i++) {
    for(int j=0; j<N; j++) {
        rs[i][j] = a[i][N-1-j];
        cout << rs[i][j];
        if(!(rs[i][j] == b[i][j])) {
            reflectCorrect=0;
        }
    }
    cout << "\n";
}

【问题讨论】:

  • 您认为向我们展示正确的代码如何让我们猜测您未向我们展示的代码中有什么问题?
  • 什么恶魔编译器甚至可以编译这个?你不应该在 C++ 中创建可变大小的数组。

标签: c++ string scope


【解决方案1】:

rs[i][j] = a[i][N-1-j]; 行不正确。它可能会超出分配的字符串的范围。当您在此处编写后立即打印它时看起来一切正常,但稍后,其他代码将使用该空间来做其他事情。因为您正在为字符串写入单个字符,所以您可以使用 push_back 代替。

rs[i].push_back(a[i][N-1-j]);

这应该会根据需要为字符串分配更多空间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-01
    • 2020-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    相关资源
    最近更新 更多