C字符串比较 我在C++中编码,在C中完全新的。 为什么不起作用?我想通过键入exit来结束程序 #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char command[4]; do{ printf( " -> " ) ; scanf("%c", &command); }while(&command != "exit"); return 0; } #包括 #包括 #包括 int main() { char命令[4]; 做{ printf(“->”); scanf(“%c”,命令(&c)); }while(&command!=“退出”); 返回0; }
显然,您使用:C字符串比较 我在C++中编码,在C中完全新的。 为什么不起作用?我想通过键入exit来结束程序 #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char command[4]; do{ printf( " -> " ) ; scanf("%c", &command); }while(&command != "exit"); return 0; } #包括 #包括 #包括 int main() { char命令[4]; 做{ printf(“->”); scanf(“%c”,命令(&c)); }while(&command!=“退出”); 返回0; },c,string,loops,while-loop,C,String,Loops,While Loop,显然,您使用: while (strcmp(c, "exit")) 您的代码所做的是将输入缓冲区的地址与静态字符串的地址进行比较“exit”,这当然永远不会匹配。必须在指针处比较字符 while(strcmp(command, "exit") != 0); 另一个问题是,对于一个五字节的字符串,您有一个四字节的缓冲区,终止符需要适合。C是非常棘手的,这种方式,你需要分配一个“足够大”的缓冲区,无论人们可能键入什么,否则程序将立即崩溃。测试程序使用1024或相当大的值 现在我说“显然”,是因为
while (strcmp(c, "exit"))
您的代码所做的是将输入缓冲区的地址与静态字符串的地址进行比较“exit”
,这当然永远不会匹配。必须在指针处比较字符
while(strcmp(command, "exit") != 0);
另一个问题是,对于一个五字节的字符串,您有一个四字节的缓冲区,终止符需要适合。C是非常棘手的,这种方式,你需要分配一个“足够大”的缓冲区,无论人们可能键入什么,否则程序将立即崩溃。测试程序使用1024或相当大的值
现在我说“显然”,是因为在编写C代码时,您应该始终打开一个窗口,以确保您使用的函数和参数正确,并知道您有哪些可用的工具。因为在C中,您必须使用strcmp进行字符串比较 在C语言中,字符串是以
'\0'
-终止字节结尾的字符序列,其值为0
字符串“exit”
在内存中看起来像这样:
+-----+-----+-----+-----+------+
|“e”|“x”|“i”|“t”|“\0”|
+-----+-----+-----+-----+------+
其中‘e’==101,‘x’==120,等等。
字符的值由字符的代码决定
只是比较指针而已
while(strcmp(command, "exit") != 0);
这是正确的<当两个字符串相等时,code>strcmp返回0,即非零
否则的话,我会很珍惜的。看
人马骑警
这里您只读取1个字符,此命令
不是字符串
scanf("%s", command);
这是正确的
下一个错误是
char command[4];
这可以保存最大长度为3个字符的字符串,因此“exit”
不会
放进缓冲器里
成功
char command[1024];
然后可以存储最大长度为1023字节的字符串
通常,如果要保存长度为n
的字符串,您需要一个char
数组
至少
n+1
维度。代码存在多个问题
\0
%s
输入字符串<代码>%c用于字符strcmp
来比较字符串这将继续循环,而字符串是相同的,0结果表示相同,或“没有差异”。@tadman是的,你是对的,我修复了答案。感谢您的反馈。
scanf(“%s”,命令)代码>不需要-。@Clifford感谢您的反馈,我只是复制粘贴并从%c
更改为%s
,而没有查看行的其余部分。您真的应该保存c样式的字符串以备以后使用。它们真的很复杂,在处理它们之前,你应该让自己对语言更加熟悉。这是我第一次这样看待它。通常情况下,c->c++程序员陷入困境,我们说使用std::string。在这里,使用c++->c std::string的程序员使用c stringsShort回答:在c中,没有一个比较运算符或关系运算符被定义为使用数组类型(字符串被存储为字符数组)。您必须使用strcmp
或strncmp
库函数来比较字符串。我希望看到显式的!=测试中的0
。
char command[4];
char command[1024];