C语言命令行参数匹配问题求助:为何判断逻辑不生效?
C语言命令行参数匹配失败的原因及解决办法

你代码里的核心问题是用==直接比较字符串,这在C语言里是错误的。
C语言中,字符串本质是字符数组,变量名(比如argv[1])和字符串常量(比如"abc")都是指向字符数组的指针。==比较的是两个指针的内存地址,而不是字符串的实际内容。argv[1]指向的是命令行参数在内存中的位置,"abc"是存储在常量区的字符串,两者地址不同,所以==永远返回假,不会输出"valid"。
解决方法
使用标准库的strcmp函数来比较字符串内容,该函数定义在<string.h>头文件中:
strcmp(str1, str2)返回0,表示两个字符串内容完全相等;- 返回负数表示
str1的ASCII值小于str2;返回正数则相反。
修改后的代码示例:
#include <stdio.h> #include <string.h> int main(int argc, char *argv[]) { // 先判断是否传入了足够的参数,避免访问空指针 if (argc >= 2 && strcmp(argv[1], "abc") == 0) { printf("valid\n"); } else { printf("invalid\n"); } return 0; }
另外要加上argc >= 2的判断,防止用户未输入命令行参数时,访问argv[1]导致越界错误。
内容的提问来源于stack exchange,提问作者Barbu Cata
相关产品推荐
相关产品推荐

