检查char 2维数组中是否存在char

时间:2015-04-14 10:56:04

标签: 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","boost"
    };
    pch=strchr(matrix,'b');
    if (pch==NULL)
    {
        printf ("not exists");
    }
    else
    {
        printf("exists");
      }

    return 0;
}

1 个答案:

答案 0 :(得分:1)

您的代码中存在三个问题。

  1. 您需要添加<stdio.h>才能使用printf
  2. 此处没有足够的内存分配:

    char matrix[2][2]={
    "best","cover",
    "orbit","boost"
    };
    

    您为两个字符串提供空间,每个字符串可容纳1个字符(结尾处为NUL终止符+1)。
    使用以下方法修复它:

    char matrix[4][6]={
    "best","cover",
    "orbit","boost"
    };
    

    六个是字符串中的最大字符数+最后一个\0的字符数,四个是二维数组中最大字符串数。

  3. strchr期望第一个参数为const char*类型。您提供类型为matrix的参数char(*)[2]。您需要循环并查找该字符是否在char s数组数组的每个字符串中。
  4. 解决这些问题后,您的代码将是:

    #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;
    }