C有一个小问题。 将自己限制在简单的C(即操作系统指令)和两个字符串似乎并不相同。 这是我的代码:
char inputData[256];
int rid;
rid = read(0,inputData,256);
// Strip input
char command[rid];
int i;
for (i = 0; i<=rid-2; i++) {
command[i] = inputData[i];
}
command[rid-1] = ' ';
if (command == "exit") {
write(1,"exit",sizeof("exit"));
}
现在,如果用户在查询时在终端中输入"exit"并按回车键,则用于检测"exit"的 if 永远不会运行。 有什么想法吗?
谢谢
编辑:我承诺随时使用git,因此可以在 github.com/samheather/octo-os 找到当前版本。 这显然不是完整的代码,但它演示了问题。
不能将字符串与 == 进行比较。你需要使用 strcmp。
if (strcmp(command, "exit") == 0) {
C 字符串实际上是字符数组。您可以将"命令"视为指向第一个字符的指针。您希望比较字符串中的每个字符,而不仅仅是第一个字符的位置。
你应该使用 strcmp
来比较 C 中的字符串。
if(strcmp(command, "exit") == 0) //strcmp returns 0 if strings are equal
引用:
A zero value indicates that both strings are equal. A value greater than zero indicates
that the first character that does not match has a greater value in str1 than in str2.
a value less than zero indicates the opposite.
就目前而言,您正在将command
的地址与字符串文字"exit"
的地址进行比较,这几乎不可能相同。
您希望将内容与 strcmp
进行比较,或者(如果"仅操作系统指令"表示没有标准库函数)您自己编写的等效项,用于遍历字符串并比较它们包含的字符。
正如其他人所说,==
不适用于字符串。原因是它会比较给出的指针。
在表达式中
command == "exit"
command
是指向数组变量的指针,而"exit"
是指向驻留在只读数据空间中的字符串的指针。它们永远不可能相同,因此比较总是错误的。
这就是为什么strcmp()
是要走的路。
使用标准库中的strcmp
。