繁体   English   中英

c 比较 char 和 argv 不断得到指针和 integer 之间的比较

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM