C ++字符串数组&访问字符

时间:2013-08-01 22:51:29

标签: c++ arrays string char

在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;
}

当我想要打印所有“lines [i]”时,会出现一些未知字符。

预期:

  

交流励磁发电机

     

交流励磁发电机

     

bdfh

     

bdfh

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

  

aceg'aceg■bdfh

     

交流励磁发电机■bdfh

     

bdfh

     

bdfh

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

还有其他方法吗? (如果可能的话没有像C中那样的库)

修改

我在此邮件中添加了所有代码。

3 个答案:

答案 0 :(得分:2)

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

确保您执行类似

的操作
for (int i = 0; i < 4; i++) {
    lines[i][n] = '\0';
}

答案 1 :(得分: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';
}

答案 2 :(得分: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]. 

这意味着你“string”没有正确的停止标志。

如果您只存储4个字符,请使用line[i][n] = '\0'char[i][4] = '\0'