如何从2D字符数组访问特定字符?

问题描述 投票:0回答:2

我有一个字符串数组,我正在尝试从每个字符串中访问第二个字符。我可以正常访问和打印第一个字符,但是当我尝试对第二个字符执行相同操作时,会遇到段错误。参见下面的代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// Intializes the chess board in its default state
char gameBoard[64][3] = {
    {"BR"}, {"BN"}, {"BB"}, {"BQ"}, {"BK"}, {"BB"}, {"BN"}, {"BR"},
    {"BP"}, {"BP"}, {"BP"}, {"BP"}, {"BP"}, {"BP"}, {"BP"}, {"BP"},
    {"O "}, {"O "}, {"O "}, {"O "}, {"O "}, {"O "}, {"O "}, {"O "},
    {"O "}, {"O "}, {"O "}, {"O "}, {"O "}, {"O "}, {"O "}, {"O "},
    {"O "}, {"O "}, {"O "}, {"O "}, {"O "}, {"O "}, {"O "}, {"O "},
    {"O "}, {"O "}, {"O "}, {"O "}, {"O "}, {"O "}, {"O "}, {"O "},
    {"WP"}, {"WP"}, {"WP"}, {"WP"}, {"WP"}, {"WP"}, {"WP"}, {"WP"},
    {"WR"}, {"WN"}, {"WB"}, {"WQ"}, {"WK"}, {"WB"}, {"WN"}, {"WR"}
};

int main(int argc, char** argv){
    printf("%c\n", gameBoard[0][0]);
    printf("%c\n", gameBoard[0][1]);
}

此代码提供输出:

B
Segmentation fault (core dumped)

我想我可能未正确初始化数组或对内存做了一些愚蠢的操作,但我不确定。我尝试过更改数组的尺寸,以确保分配了足够的内存,但未执行任何操作。

任何帮助将不胜感激。泰]

编译器版本:gcc(Debian 8.3.0-6)8.3.0

c arrays segmentation-fault string-literals
2个回答
-3
投票

您的代码段是正确的,但是您已经使用了int main()功能,所以必须将return设置为它:

代码段:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// Intialises the chess board in its default state
char gameBoard[64][3] = {
    {"BR"}, {"BN"}, {"BB"}, {"BQ"}, {"BK"}, {"BB"}, {"BN"}, {"BR"},
    {"BP"}, {"BP"}, {"BP"}, {"BP"}, {"BP"}, {"BP"}, {"BP"}, {"BP"},
    {"O "}, {"O "}, {"O "}, {"O "}, {"O "}, {"O "}, {"O "}, {"O "},
    {"O "}, {"O "}, {"O "}, {"O "}, {"O "}, {"O "}, {"O "}, {"O "},
    {"O "}, {"O "}, {"O "}, {"O "}, {"O "}, {"O "}, {"O "}, {"O "},
    {"O "}, {"O "}, {"O "}, {"O "}, {"O "}, {"O "}, {"O "}, {"O "},
    {"WP"}, {"WP"}, {"WP"}, {"WP"}, {"WP"}, {"WP"}, {"WP"}, {"WP"},
    {"WR"}, {"WN"}, {"WB"}, {"WQ"}, {"WK"}, {"WB"}, {"WN"}, {"WR"}
};

int main(int argc, char** argv)
{
    printf("%c\n", gameBoard[0][0]);
    printf("%c\n", gameBoard[0][1]);
    return 0;
}

此代码将完美地用于获取数组的特定元素

输出:

B
R

-3
投票

您需要启动数组

char gameBoard[64][3] = {
{'B','R','/0'}, {'B','N','/0'}, {'B','B','/0'}, {'B','Q,'/0'},......
};

或使用字符串文字

char gameBoard[64][3] = {
"BR", "BN", "BB", "BQ",......
};

参考:-https://overiq.com/c-programming-101/array-of-strings-in-c/

© www.soinside.com 2019 - 2024. All rights reserved.