错误:指针和整数之间的比较('int'和'string'(又名'char *'))

时间:2017-03-19 08:27:41

标签: c string pointers cs50

我从C开始,任何帮助都将受到赞赏。

从“电子邮件”中保存的字符串中,我想逐个比较,如果这些符合用户在argv []上传递的字符串。而且,我的if条款有问题,我不明白。

crypt.c:17:18: error: comparison between pointer and integer ('int' and 'string' (aka 'char *')) [-Werror]
        if (g[i] == argv[1])
            ~~~~ ^  ~~~~~~~

我不同意编译器这是我之前定义的指针和整数。 g作为字符串,argv []作为字符串。有人可以解释我所缺少的东西吗?我几乎不知道指针,你能提供一些理论吗?感谢。

这是我的代码:

#include <stdio.h>
#include <cs50.h>
#include <string.h>

int main(int argc, string argv[])
{
    if (argc != 2)
    {
        printf("Wrong Input\n");
    }
    string g = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
    for (int i = 0, n = strlen(g); i < n; i++)
    {
        if (g[i] == argv[1])
        {
            printf("True\n");
        }
        else
            printf("False\n");
    }
}

2 个答案:

答案 0 :(得分:2)

我将假设stringtypedef char *。 (C中的字符串非常奇怪,我建议不要假装它们只是指针而不是用string类型隐藏它。)

问题是argv是一个char **,一个字符串数组。而gchar *或字符串。 g[0]是字符串的第一个字符,charargv[0]是第一个字符串,char *

所以g[i] == argv[1]正在比较charchar *。你的意思可能是g[i] == argv[1][i]

答案 1 :(得分:0)

g是一个字符串,但g[i]不再是字符串。 (阅读:https://www.tutorialcup.com/cplusplus/strings.htm#CharacterArray

也许你可以把它作为一个角色来检查。

#include <stdio.h>
#include <cs50.h>
#include <string.h>

// maybe cs50.h have this line inside:
// typedef char* string;

int main(int argc, string argv[])
{
    if ((argc != 2) || (strlen(argv[1])!=1))
    {
        printf("Wrong Input\n");
        return 0;
    }

    // second argument, and first char
    char arg = argv[1][0];

    string g = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
    for (int i = 0, n = strlen(g); i < n; i++)
    {
        if (g[i] == arg)
        {
            printf("True\n");
        }
        else
        {
            printf("False\n");
        }
    }
}