错误:字符数组的Innitializer-string太长了c ++

时间:2014-11-05 01:51:58

标签: c++ arrays ascii

每次我尝试编译程序时都会产生错误,说明字符数组中的字符太多。

char map[10][10] = { "##########",
                     "#@       #",
                     "#        #",
                     "######## #",
                     "#      # #",
                     "#  # # # #",
                     "#+#  # # #",
                     "##   # # #",
                     "#    #   #",
                     "#!########" };

这个程序是我们在计算机科学课上做的一个类似RPG的游戏,但我无法弄清楚这些错误。

整个计划在这里:

    #include <iostream>
    #include <windows.h>

    using namespace std;

    void Display(); //creates display function




    bool stopGame = false; 
    int gamespeed = 100, hp = 100, maxHP = 100, XAmount = 9, YAmount = 9;

    char map[10][10] = { "##########", //creates game map
                         "#@       #",
                         "#        #",
                         "######## #",
                         "#      # #",
                         "#  # # # #",
                         "#+#  # # #",
                         "##   # # #",
                         "#    #   #",
                         "#!########" };





    int main()
    {

        Display(); //runs display function
        return 0;
    }

    void Display() 
    {
        while(stopGame == false)
        {

            Sleep(gamespeed); //sets a gamespeed
            system("cls"); //clears screen

            for(int posY = 0; posY <= YAmount; posY++) //prints game map to screen
            {
                cout << map[posY] << endl;
            }

            for(int posY = 0; posY <= YAmount; posY++) //gets y position
            {

                for(int posX = 0; posX <= XAmount; posX++) //gets x position
                {

                    switch(map[posY][posX]) 
                    {

                        case '@': 
                        {



                            if(GetAsyncKeyState(VK_UP) != 0) //up movement
                            {
                                int y = (posY-1);
                                switch(map[y][posX])
                                {

                                    case ' ':
                                    {
                                        map[posY][posX] = ' ';
                                        posY -= 1;
                                        map[y][posX] = '@';

                                    }break;
                                    case '+':
                                    {
                                        map[posY][posX] = 3;
                                        map[posY][posX] = ' ';
                                        posY -= 1;
                                        map[y][posX] = '@';

                                    }break;


                                }


                            }


                            if(GetAsyncKeyState(VK_DOWN) != 0) //down movement
                            {

                                int y2 = (posY+1);
                                switch(map[y2][posX])
                                {

                                    case ' ':
                                    {

                                        map[posY][posX] = ' ';
                                        posY += 1;
                                        map[y2][posX] = '@';

                                    }break;
                                    case '+':
                                    {
                                        map[posY][posX] = 3;
                                        map[posY][posX] = ' ';
                                        posY += 1;
                                        map[y2][posX] = '@';

                                    }break; 

                                }

                            }

                            if(GetAsyncKeyState(VK_LEFT) != 0) //move left
                            {

                                int x = (posX-1);
                                switch(map[posY][x])
                                {

                                    case ' ':
                                    {

                                        map[posY][posX] = ' ';
                                        posX -= 1;
                                        map[posY][x] = '@';

                                    }break;
                                    case '+':
                                    {
                                        map[posY][posX] = 176;
                                        map[posY][posX] = ' ';
                                        posX += 1;
                                        map[posY][x] = '@';

                                    }break;

                                }

                            }

                            if(GetAsyncKeyState(VK_RIGHT) != 0) //move right
                            {

                                int x2 = (posX+1);
                                switch(map[posY][x2])
                                {

                                    case ' ':
                                    {

                                        map[posY][posX] = ' ';
                                        posX += 1;
                                        map[posY][x2] = '@';

                                    }break;

                                    case '+':
                                    {
                                        map[posY][posX] = 3;
                                        map[posY][posX] = ' ';
                                        posX += 1;
                                        map[posY][x2] = '@';

                                    }break;



                                }

                            }


                        }break;

                    case '#': //sets ascii skin
                    {
                        map[posY][posX] = 219;
                    }break;
                    case '+': //sets ascii skin
                    {
                        map[posY][posX] = 3;
                    }



                    }

                }

            }

        }

    }

如果有人能提供帮助那就太棒了。

1 个答案:

答案 0 :(得分:1)

在C ++中,您不能从长度为10的字符串文字中初始化长度为10的char数组。

一个简单的解决方法是将其转到11,例如char tap[10][11] =等。

此修复程序还可以使cout << map[posY] << endl;正常工作。 (目前这会导致缓冲区溢出并搞砸你的显示器。)