比较 char* 和 char
Comparing char* with char
我正在开发一个程序,从命令行输入中获取文件名。我需要检查输入是否是一个给定的字符说“-”并根据这个结果处理文件,但我不太确定该怎么做。我试过的方法,在逻辑上似乎是有道理的,只是检查 if
argv[1] == "-";
总是returns零,即使我在命令输入中写“-”也是如此。我能做什么?
你需要写
strcmp(argv[1],"a")==0;
在您的示例中,您比较了两个指针,而不是两个字符串。
编译时,编译器在内存中的某处声明 "a" ,然后在编译时用它的内存地址替换它。由于 argv[1] 不能真正与 (temporary) "a" 位于同一字节,因此结果始终为假。
您需要遍历两个字符串并迭代比较每个字符。
strcmp
比较 2 个字符串和 return 0 如果它们以这种确切的方式相等。
有关 strcmp
的更多信息:http://www.cplusplus.com/reference/cstring/strcmp/
为了处理多个字符,您可以放置几个 if-else :
if (strcmp(argv[1],"-")==0){
minus_character_handling_function();
} else if (strcmp(argv[1],"+")==0){
plus_character_handling_function();
} else if (strcmp(argv[1],"a")==0){
a_character_handling_function();
}
通过检查:
argv[1] == "-";
您正在比较包含命令行第一个参数的 地址 和 地址 "-"
你的程序中有,它们是不同的,所以这就是你的测试失败的原因。您实际上想比较由这两个地址开始的内存位置中包含的字符,这是由 strcmp
系列的功能完成的。
表达式 argv[1]
是一个(以 null 结尾的)字符数组的地址。
表达式 "-"
是另一个(以 null 结尾的)字符数组的地址。
这些地址不相等,因此表达式 argv[1] == "-"
始终为假。
也就是说,这是检查输入是否为给定字符的另一种方法:
if (argv[1][0] != 0 && argv[1][1] == 0)
{
switch (argv[1][0])
{
case '-':
...
break;
case '+':
...
break;
case '=':
...
break;
...
}
}
我正在开发一个程序,从命令行输入中获取文件名。我需要检查输入是否是一个给定的字符说“-”并根据这个结果处理文件,但我不太确定该怎么做。我试过的方法,在逻辑上似乎是有道理的,只是检查 if
argv[1] == "-";
总是returns零,即使我在命令输入中写“-”也是如此。我能做什么?
你需要写
strcmp(argv[1],"a")==0;
在您的示例中,您比较了两个指针,而不是两个字符串。
编译时,编译器在内存中的某处声明 "a" ,然后在编译时用它的内存地址替换它。由于 argv[1] 不能真正与 (temporary) "a" 位于同一字节,因此结果始终为假。
您需要遍历两个字符串并迭代比较每个字符。
strcmp
比较 2 个字符串和 return 0 如果它们以这种确切的方式相等。
有关 strcmp
的更多信息:http://www.cplusplus.com/reference/cstring/strcmp/
为了处理多个字符,您可以放置几个 if-else :
if (strcmp(argv[1],"-")==0){
minus_character_handling_function();
} else if (strcmp(argv[1],"+")==0){
plus_character_handling_function();
} else if (strcmp(argv[1],"a")==0){
a_character_handling_function();
}
通过检查:
argv[1] == "-";
您正在比较包含命令行第一个参数的 地址 和 地址 "-"
你的程序中有,它们是不同的,所以这就是你的测试失败的原因。您实际上想比较由这两个地址开始的内存位置中包含的字符,这是由 strcmp
系列的功能完成的。
表达式 argv[1]
是一个(以 null 结尾的)字符数组的地址。
表达式 "-"
是另一个(以 null 结尾的)字符数组的地址。
这些地址不相等,因此表达式 argv[1] == "-"
始终为假。
也就是说,这是检查输入是否为给定字符的另一种方法:
if (argv[1][0] != 0 && argv[1][1] == 0)
{
switch (argv[1][0])
{
case '-':
...
break;
case '+':
...
break;
case '=':
...
break;
...
}
}