gpt4 book ai didi

c - 如何解决字符串比较错误中的常量指针

转载 作者:行者123 更新时间:2023-11-30 21:27:44 25 4
gpt4 key购买 nike

#include<stdio.h>
#include<conio.h>
#include<malloc.h>
#include<string.h>
int main()
{

int n,m,i,j;
char **a;

scanf("%d %d",&n,&m);
a=(char **)malloc(n*sizeof(char *));
for(i=0;i<m;i++)
a[i]=(char *)malloc(m*sizeof(char));
for(i=0;i<n;i++)
for(j=0;j<m;j++)
scanf("%c",(*(a+i)+j));
for(i=0;i<n;i++)
for(j=0;j<m;j++)
printf("%d",strcmp(*(*(a+i)+j),"G"));

return 0;
}


我想将2-D字符数组中的每个字符与G进行比较。如果结果为true,它将打印零,但编译器在strcmp中显示错误。如何解决此问题以及其他替代方法以便与一个字符进行比较另一个不变的字符使用动态内存分配,就像这里一样。

最佳答案

有一些错误和一些建议。

建议:


不要转换malloc的返回值。尽管C编译器不会抱怨,但它可能导致将来出现问题。
字符的大小为1,因此无需指定sizeof(char)
编译器将指向某个对象的指针就像某个对象的数组一样对待,因此您无需担心难以理解的解引用就可以做到。


问题:


要读取单个字符,必须为scanf提供一个指针(将读取的字符放入的地址)。
您不能使用需要字符串的strcmp比较单个字符(字符串是一个以空值终止的序列/字符数组)。
错误:在您的第一个for循环中,您使用m代替了n


因此,您的解决方案可能是:

int main()
{
int n,m,i,j;
char **a;

scanf("%d %d",&n,&m);
a= malloc(n*sizeof(char *));
for(i=0;i<n;i++)
a[i]= malloc(m);
for(i=0;i<n;i++)
for(j=0;j<m;j++)
scanf("%c",&a[i][j]);
for(i=0;i<n;i++)
for(j=0;j<m;j++)
printf("%d", (a[i][j]=='G'?1:0));

return 0;
}

关于c - 如何解决字符串比较错误中的常量指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48092595/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com