-1

在 C++ 中,我正在尝试创建字符串数组。而且我还想访问字符并像这样更改它们:

#include<iostream>

using namespace std;

int main(){
    int n;
    cin >> n;
    char lines[4][n+1];
    int color = 0;
    for(int a = 0; a < n; a++){
        for(int i = 0; i < 4; i++){
            lines[i][a] = (char) (color % 25 + 97);
            if(i == 1 || i == 3){
                color++;
            }
        }
    }
    cout << lines[0] << endl << lines[1] << endl << lines[2] << endl << lines[3];
    return 0;
}

当我希望它打印所有“行 [i]”时,会出现一些未知字符。

预期的:

王牌

王牌

bdfh

bdfh

输出:(http://i.stack.imgur.com/SR4Y4.png

aceg'aceg■bdfh

aceg■bdfh

bdfh

bdfh

你知道原因吗?(我检查了我的整个代码很多次,它导致了一些我不知道的关于我认为的 char 数组的数组)

还有其他方法可以做到这一点吗?(如果可能的话,没有像 C 语言这样的库)

编辑

我将所有代码添加到此消息中。

4

3 回答 3

2

如果不确切了解您的打印方式,我无法确定,但如果您只是通过类似的方式打印printf("%s\n", lines[i]);,那么你的问题是因为你忘了空终止你的字符串。

确保你做类似的事情

for (int i = 0; i < 4; i++) {
    lines[i][n] = '\0';
}
于 2013-08-01T23:05:57.160 回答
0

对我来说很好:

#include <stdio.h>

for(int i = 0; i != 4; ++i)
{
    fwrite(lines[i], 1, n, stdout);
    fputc('\n', stdout);
}

或者在 C++ 中:

#include <iostream>
#include <string>

for(int i = 0; i != 4; ++i)
{
    std::cout << std::string(lines[i], n) << '\n';
}
于 2013-08-01T22:54:28.557 回答
0
aceg'aceg■bdfh

aceg■bdfh

bdfh

bdfh

看到你的输出然后你可以找到:

line[0] in fact print line[0] & line [1] & line[2].
line[1] in fact print line[1] & line [2]. 

这意味着您的“字符串”没有正确的停止标志。

使用line[i][n] = '\0'或者char[i][4] = '\0'如果你只存储 4 个字符。

于 2013-08-02T00:21:17.233 回答