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

时间:2018-01-04 09:48:10

标签: c pointers dynamic-memory-allocation strcmp

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

我想比较二维字符数组中的每个字符和G.如果结果为真,它将打印为零,但编译器在strcmp中显示错误。如何解决此问题以及还有什么其他选择以便比较带有另一个常量字符的字符,使用动态内存分配,就像这里一样。

1 个答案:

答案 0 :(得分:0)

有一些错误和一些建议。

建议:

  • 不要投放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;
}