gets()函数字符串行为

时间:2014-05-06 09:28:18

标签: c if-statement gets

我使用gets函数和一个简单的if表达式有一个小问题。 它必须检查输入是否正确,在这种情况下应该是:!S

char checkCommand[5];
gets(checkCommand);
if(checkCommand=="!S")....;
else puts("Invalid command!"); 

为什么我永远不会最终获得表达的真正价值, 即使我打字!S?谢谢你的所有答案!

4 个答案:

答案 0 :(得分:4)

因为你没有比较C中的字符串:(checkCommand=="!S")

要比较字符串,您应使用strcmpstrncmpmemcmp函数。

示例:在您的情况下,您可以像这样使用它:

if (strncmp(checkCommand, "!S", 5) == 0)

要详细了解这些功能,请访问this link等。

你也应该注意到警告“gets很危险......”这样的事情。您应该避免使用gets并使用fgets代替。 Chris Jester-Young 在他的回答中解释了原因。

答案 1 :(得分:1)

C没有字符串;它有字符指针,==只是比较指针。使用strcmpstrcasecmp(如果您的系统具有此功能)来比较字符串。请注意,当字符串相等时,strcmp会返回0。

另外,请避免使用gets。如果用户输入的字符串超过4个字符(在您的情况下),您的内存的其他部分将开始被潦草地写入。相反,更喜欢使用fgets,它允许您指定输入缓冲区的大小。

答案 2 :(得分:0)

您必须使用strcmp()函数来比较c

中的两个字符串
 int ret;
 ret=strcmp(checkCommand,"!s");
 if(ret!=0)   
 {
 printf("Invalid Command");
 }

答案 3 :(得分:-2)

替换if(checkCommand=="!S") - > if(!strcmp(checkcommand,"!S"))