在更大的代码中我有这段代码:
#define N 10
..
..
..
char Map [N][N] = {"##########",
"#@ #",
"# #",
"# #",
"# #",
"# #",
"# #",
"# #",
"# #",
"##########"};
当我尝试编译并运行它时,表单代码bloke我给了我错误
F:\ C ++ \ Maze \ main.cpp | 25 |警告:扩展初始化列表仅适用于-std = c ++ 11或-std = gnu ++ 11 [默认启用] |
知道我在这个简单的代码中做错了什么?
答案 0 :(得分:6)
示例中每行的长度为10 + 1 = 11(请记住字符串的空终止符需要分配空间)。所以:
#define N 10
#define M 11
char Map [N][M] = {"##########",
"#@ #",
"# #",
"# #",
"# #",
"# #",
"# #",
"# #",
"# #",
"##########"};
答案 1 :(得分:4)
您忘记了字符串文字具有隐式空终止符,因此需要额外的存储字节。
如果你写了char Map [N][N + 1]
,那么它会正常工作。
更好的是,让编译器对行进行计数:write char Map [][N + 1]
。您可能想要更改N
的定义。将在编译时评估N + 1
,这就是您可以将其用作数组维度的原因。
答案 2 :(得分:0)
为什么不使用字符串向量?您仍然可以使用operator []:
引用内部元素#include <string>
#include <iostream>
#include <vector>
using std::cout;
using std::endl;
int main(){
std::vector<std::string > s = {{"##########"},
{"#@ #"},
{"# #"},
{"# #"},
{"# #"},
{"# #"},
{"# #"},
{"# #"},
{"# #"},
{"##########"}};
for (auto i : s)
cout<<i<<endl;
cout<<"\nGet @ symbol:"<<s[1][1]<<end
return 0;
}
输出:
##########
#@ #
# #
# #
# #
# #
# #
# #
# #
##########
Get @ symbol:@
您可以找到代码here
答案 3 :(得分:-1)
您需要按如下方式创建地图:
char *Map [N] = {"##########",
"#@ #",
"# #",
"# #",
"# #",
"# #",
"# #",
"# #",
"# #",
"##########"};
例如:
#include <stdio.h>
#define N 10
int
main (void) {
int i;
char *Map [N] = {"##########",
"#@ #",
"# #",
"# #",
"# #",
"# #",
"# #",
"# #",
"# #",
"##########"};
for (i = 0; i < 10; i++)
printf (" Map[%d] %s\n", i, Map[i]);
return 0;
}
<强>输出:强>
$ ./bin/tcs
Map[0] ##########
Map[1] #@ #
Map[2] # #
Map[3] # #
Map[4] # #
Map[5] # #
Map[6] # #
Map[7] # #
Map[8] # #
Map[9] ##########