在一组字符串中查找某个特定的字符值,编译无错误,但是运行总是报错。函数是书《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);