我有这个代码:
if (argv[i] == "-n")
{
wait = atoi(argv[i + 1]);
}
else
{
printf("bad argument '%s'\n",argv[i]);
exit(0);
}
执行此代码时,我收到以下错误:
不好的论点'-n'
我真的不知道为什么会这样。有人可以解释吗?
字符串比较需要 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);如果两个值相等,则为零。
该==
运算符不适用于字符串的内容,因为在此应用程序中字符串实际上是字符指针,并且指针会进行比较。
要比较字符串的内容,请使用strcmp
or strncmp
。
您正在比较指针(argv[i]
and of"-n"
是 achar*
和 a const char*
)。
改为使用strcmp()
。
你在这里真正做的是指针比较。argv[i] 不是字符串,它是指向内存中实际字符串开始位置的指针。使用 strcmp()。
您正在比较指针,而不是字符串内容。 argv[i]
和"-n"
是两个不同的字符串,存储在内存中的两个不同位置,即使字符串中的字符相等。
在 C 中,运算符==
比较相等。
相同数字类型的值以直接的方式进行比较(即为2 + 2 == 4
真)。
不同整数(和非整数数字)类型的值会进行一些转换。见别处。
如果指向同一地址,则指针相等。
字符串文字被放置在内存中,不会与任何其他内容重叠;包括不重叠 argv[i] 指向的任何内容(对于 i = 0 到 argc)。
所以你在比较两个不相等的指针;这就是为什么。你想用if (!strcmp(argv[i], "-n")) { ... }
.
int equal(char* stringa, char* stringb) {
while((*stringa) && (*stringb)) {
if(*stringa!=*stringb)
return FALSE;
stringa++;
stringb++;
}
return TRUE;
}
也为我工作