我有这段代码:
if (argv[i] == "-n")
{
wait = atoi(argv[i + 1]);
}
else
{
printf("bad argument '%s'\n",argv[i]);
exit(0);
}
执行此代码时,我收到以下错误:
坏参数'-n'
我真的不知道为什么会这样。有人可以解释一下吗?
答案 0 :(得分:14)
字符串比较需要C中的函数 - 通常strcmp()
来自<string.h>
。
if (strcmp(argv[i], "-n") == 0)
{
wait = atoi(argv[i + 1]);
}
else
{
printf("bad argument '%s'\n",argv[i]);
exit(0);
}
如果第一个参数在第二个参数之前排序,则strcmp()
函数返回负值(不一定是-1);如果第一个参数在第二个参数之后排序,则为正值(不一定为+1);如果两个值相等则为零。
答案 1 :(得分:1)
==
运算符不能处理字符串的内容,因为字符串在此应用程序中是有效的字符指针,并且指针会被比较。
要比较字符串的内容,请使用strcmp
或strncmp
。
答案 2 :(得分:0)
您正在比较指针(argv[i]
和"-n"
是char*
和const char*
。
改为使用strcmp()
。
答案 3 :(得分:0)
你在这里做的是指针比较。 argv [i]不是字符串,它是指向内存中实际字符串开始的位置的指针。使用strcmp()。
答案 4 :(得分:0)
您正在比较指针,而不是字符串内容。 argv[i]
和"-n"
是两个不同的字符串,存储在内存中的两个不同位置,即使字符串中的字符相等也是如此。
答案 5 :(得分:0)
在C中,运算符==
比较相等。
以直接的方式比较相同数值类型的值(即2 + 2 == 4
为真)。
不同整数(和非整数数字)类型的值经历一些转换。见其他地方。
如果指向同一地址,则指针相等。
字符串文字放在内存中,不与任何其他东西重叠;包括不重叠argv [i]指向的任何东西(对于i = 0到argc)。
所以你要比较两个不等的指针;这就是为什么。您想使用if (!strcmp(argv[i], "-n")) { ... }
。
答案 6 :(得分:0)
int equal(char* stringa, char* stringb) {
while((*stringa) && (*stringb)) {
if(*stringa!=*stringb)
return FALSE;
stringa++;
stringb++;
}
return TRUE;
}
也在为我工作