C 检查字符二维数组中是否存在字符

C 检查字符二维数组中是否存在字符,c,arrays,pointers,C,Arrays,Pointers,我试图检查一个字符是否属于二维字符数组,但我的代码不能适用于所有字符。我认为我的指针出了问题。例如,如果我将“b”改为“r”,它就不能正常工作。 提前谢谢 #include <stdlib.h> #include <string.h> int main(int argc, char *argv[]) { char *pch; char matrix[2][2]={ "best","cover", "orbit","boos

我试图检查一个字符是否属于二维字符数组,但我的代码不能适用于所有字符。我认为我的指针出了问题。例如,如果我将“b”改为“r”,它就不能正常工作。 提前谢谢

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

int main(int argc, char *argv[]) {
    char *pch;
    char matrix[2][2]={
        "best","cover",
        "orbit","boost"
    };
    pch=strchr(matrix,'b');
    if (pch==NULL)
    {
        printf ("not exists");
    }
    else
    {
        printf("exists");
      }

    return 0;
}
#包括
#包括
int main(int argc,char*argv[]){
char*pch;
字符矩阵[2][2]={
“最佳”、“封面”,
“轨道”,“助推”
};
pch=strchr(矩阵,'b');
如果(pch==NULL)
{
printf(“不存在”);
}
其他的
{
printf(“存在”);
}
返回0;
}

您的代码中有三个问题

  • 要使用
    printf
    ,您需要包括
  • 此处分配的内存不足:

    char matrix[2][2]={
    "best","cover",
    "orbit","boost"
    };
    
    您可以为两个字符串提供空间,每个字符串可以容纳1个字符(+1表示末尾的NUL终止符)。
    使用以下方法修复它:

    char matrix[4][6]={
    "best","cover",
    "orbit","boost"
    };
    
    六是字符串中的最大字符数+结尾处
    \0
    的一个,四是2D数组中的最大字符串数

  • strchr
    要求第一个参数的类型为
    const char*
    。您可以给出参数
    矩阵
    ,该参数的类型为
    char(*)[2]
    。您需要循环并查找字符是否位于
    char
    s数组的每个字符串中
  • 解决这些问题后,您的代码将是:

    #include <stdlib.h> // Not required
    #include <string.h> // For strchr()
    #include <stdio.h> // For printf()
    
    int main(int argc, char *argv[]) {
        char *pch;
        char matrix[4][6]={
            "best","cover",
            "orbit","boost"
        };
        int i;
    
        for(i=0;i<4;i++)
        {
            pch=strchr(matrix[i],'b');
    
            if (pch==NULL)
            {
              printf ("not exists in %s\n",matrix[i]);
            }
            else
            {
              printf("exists in %s\n",matrix[i]);
            }
        }
    
        return 0;
    }
    
    #包含//不需要
    #包括//用于strchr()
    #包括//用于printf()
    int main(int argc,char*argv[]){
    char*pch;
    字符矩阵[4][6]={
    “最佳”、“封面”,
    “轨道”,“助推”
    };
    int i;
    
    对于(i=0;i不正确的矩阵创建,我认为您需要二维字符数组,或二维字符串数组?在C中,一般建议是避免使用二维数组,并始终使用1D数组,可能是
    char-matrix[2][6]
    ->
    char-matrix[4][6]
    char-matrix[2][6]
    (或
    [4][6]
    )我认为这是错误的,数组初始化器和问题标题中的“二维”似乎OP想要一个二维数组
    char*
    @luk32,是的。Thanks@schnaaderOP说的是“二维字符数组”,但我不确定OP自己是否知道他们想要什么…@schnaader,我也支持luk32,认为OP不知道什么是什么,他/她想要什么。