制作一个char数组错误

时间:2014-08-15 07:15:12

标签: c++

在更大的代码中我有这段代码:

#define N 10
..
..
..
char Map [N][N] =              {"##########",
                                "#@       #",
                                "#        #",
                                "#        #",
                                "#        #",
                                "#        #",
                                "#        #",
                                "#        #",
                                "#        #",
                                "##########"};

当我尝试编译并运行它时,表单代码bloke我给了我错误

F:\ C ++ \ Maze \ main.cpp | 25 |警告:扩展初始化列表仅适用于-std = c ++ 11或-std = gnu ++ 11 [默认启用] |

知道我在这个简单的代码中做错了什么?

4 个答案:

答案 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]  ##########