我在比較兩個字符串。一個存儲在一個文件中,另一個存儲在用戶(stdin)中。strcmp用fgets讀取一行
下面是一個示例方案:
int main()
{
char targetName[50];
fgets(targetName,50,stdin);
char aName[] = "bob";
printf("%d",strcmp(aName,targetName));
return 0;
}
在這個程序中,strcmp
當輸入是"bob"
返回值-1。 這是爲什麼?我認爲他們應該是平等的。我怎樣才能得到它,以便他們?
你應該避免使用'strcmp'。使用'strncmp'代替,特別是如果你正在比較一個固定寬度的字符串。使用'strncmp(aName,targetName,strlen(aName))'應該適合你。 – bta 2010-03-08 21:33:02
bta的評論是錯誤的 - 使用strncmp如果你想檢查一個前綴,而不是整個字符串,以便例如。 「山貓」也將匹配。 – 2010-03-08 21:58:07
我說過,因爲'strcmp'會繼續比較,直到到達NULL結束符或字符串不同。如果你不能確定你的字符串總是以NULL結尾,那麼'strcmp'會引起緩衝區溢出和內存訪問衝突。 'strncmp'不僅僅用於閱讀前綴,將最終參數設置爲固定長度緩衝區的大小,以確保不會溢出數組邊界。 – bta 2010-03-08 22:17:56