在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)
你知道原因吗? (我多次检查了我的整个代码,它导致了一些我不知道的关于我认为的char数组数组的东西)aceg'aceg■bdfh
交流励磁发电机■bdfh
bdfh
bdfh
还有其他方法吗? (如果可能的话没有像C中那样的库)
修改
我在此邮件中添加了所有代码。
答案 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'
。