(C语言)在一组字符串中查找某个特定的字符值,编译无错误,但是运行总是报错

在一组字符串中查找某个特定的字符值,编译无错误,但是运行总是报错。函数是书《C和指针》上的,主函数自己编的。求大神指点哪里出了问题。

#include <stdio.h>
#define TRUE  1
#define FALSE 0
int find_char(char** strings,char value){
    char *string;
    while((string=*strings++)!=NULL){
        while(*string!='\n'){
            if(*string++==value)
            return TRUE;
        }
    }
    return FALSE;
}
int main(){
    int m,n;
    printf("输入列数:"); 
    scanf("%d",&m);
    printf("输入行数:"); 
    scanf("%d",&n);
    char **str[m][n];
    int i,j;
    char a;
    int b;
    printf("输入字符数组的值"); 
    for(i=0; i<m; i++){
        for(j=0; j<n; j++)
            scanf("%c", &str[i][j]); }
    printf("输入要查找的字符");
    scanf("%c",&a);
    b=find_char(**str,a);
    printf("%s",&b);
}

双重指针和二维数组不应该一起用呀

是不是内存使用错误了

朋友,你这一句 char **str[m][n]; 可能不能通过编译啊。这是错误的用法,虽然你思路是对的。
其他句子我没看,你先把这句改了吧。
c和c++中不能像你这样创建数组,因为m和n是未知的。对二维数组来说,貌似只能有一个参数为未知数。具体你可以看看二维数组的知识点。
那么你这句要怎么改呢?需要用到动态分配。
c和c++的动态分配是不同的。

c的动态分配需要包含malloc头文件。

然后你那一句改为:

char **str;
str=(char **)malloc(sizeof(char*)*m*n);
for(int i=0;i<n;i++)
    str[i]=(char*)malloc(sizeof(char)*m)

那么之后你就可以正常使用str[][]这个二维指针了
要记得在程序结尾还要释放动态分配的空间

for (int i=0;i<n;i++)
    free(str[i]);
free(str);