[英]C - comparison between pointer and integer ('char *' and 'int')
[英]c compare char with argv keep getting comparison between pointer and integer
大家好,所以我一直在这上面花了几个小时。 Ik 这是一个简单的修复,但我找不到指针和 integer 之间的比较。 我从用户输入中得到一个只有一个字符长的争论。 试图将它与这个字符 main 进行比较是在一个变量中
int main(int argc, char *argv[])
char line [10][10];
line [1] = "t.a";
我首先尝试了两件事
if(line[1][1] == argv[1])
但我收到警告:指针与 integer 秒之间的比较
if(strcmp(argv[1],line[1][1]) == 0)
但我得到了
注意:预期为 'const char *' 但参数类型为 'char' extern int strcmp (const char *__s1, const char *__s2)
我用单引号和双引号都试过了
我正在尝试比较两个字符,一个字符来自 argv[1],它应该只有 1 个像“A”这样的单个字符,而 line[1][1] 应该是一个像 '.' 这样的单个字符
您的第一个示例是错误的,因为在 C 中您不使用“==”来比较字符串。 您必须使用strcmp() : int strcmp(const char *s1, const char *s2);
.
您似乎明白这一点 - 您在第二个示例中使用了“strcmp()”。
但是 strcmp() (根据我上面链接中的文档)比较字符串:空终止字符 arrays。 您正在将字符串 ( argv[1]
) 与字符 ( '.'
) 进行比较。 因此编译器警告。
这将起作用: if(strcmp(argv[1],'.') == 0) {... }
。
所以问题是 argv 是一个指针向量,当您尝试比较用户编写的字符串时,您必须使 "if('.' == *argv[1])" 为 argv[1] 的指针您可以访问字符串的字符。 因为您要做的是比较 argv[1] 的第一个元素的地址。
使用新信息,您应该将argv[1]
中的字符串与line[1]
中的字符串进行比较:
strcmp(argv[1], line[1])
假设line[1]
是一个实际的以 null 结尾的字符串。`
另请注意
line [1] = "t.a";
将不起作用,因为line[1]
是一个数组,您无法初始化数组。 但是,您可以复制到数组:
strcpy(line[1], "t.a");
或者初始化数组:
char line[10][10] = {
"",
"t.a"
// If not explicitly initialized, the remaining elements will be "zero" initialized
};
看来您真的想比较字符而不是字符串。 那么然后比较字符:
if (argc > 1 && strlen(argv[1]) == 1 && argv[1][0] == line[1][0])
{
// argv[1] is valid, contains a single character,
// and that character is equal to line[1][0]
// Do whatever is needed here..
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.