我从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");
}
}
答案 0 :(得分:2)
我将假设string
为typedef char *
。 (C中的字符串非常奇怪,我建议不要假装它们只是指针而不是用string
类型隐藏它。)
问题是argv
是一个char **
,一个字符串数组。而g
是char *
或字符串。 g[0]
是字符串的第一个字符,char
。 argv[0]
是第一个字符串,char *
。
所以g[i] == argv[1]
正在比较char
和char *
。你的意思可能是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");
}
}
}