我想比较两个字符串.一个存储在一个文件中,另一个从用户(stdin)中检索.
这是一个示例程序:
int main() { char targetName[50]; fgets(targetName,50,stdin); char aName[] = "bob"; printf("%d",strcmp(aName,targetName)); return 0; }@H_301_5@在此程序中,当输入为“bob”时,strcmp返回值-1.
为什么是这样?我认为他们应该是平等的.我怎样才能得到它们呢?
解决方法
strcmp是少数几个具有反向结果的函数之一……如果字符串相等,结果为0,而不是你想象的1 ……
if (strcmp(a,b)) { /* Do something here as the strings are not equal */ } else { /* Strings are equal */ }@H_301_5@说到fgets,有可能在字符串的末尾附加了换行符……你需要摆脱它…
+-+-+-+--+--+ |b|o|b|\n|\0| +-+-+-+--+--+@H_301_5@要摆脱换行,请执行此操作.
CAVEATS:不要使用“strlen(aName) – 1”,因为fgets返回的行可能以NUL字符开头 – 因此缓冲区的索引变为-1:aName[strcspn(aName,"\n")] = '\0'; +-+-+-+--+ |b|o|b|\0| +-+-+-+--+@H_301_5@现在,strcmp应该返回0 …