if(strncmp(buf, buf2, 7) == 0)
做同樣的事情,
if(memcmp(buf, buf2, 7) == 0)
buf
和buf2
是的char *數組或相似。
我打算把這個附加到另一個問題上,但後來決定也許最好單獨發佈它。據推測,答案要麼是微不足道的「是」,要麼不是那麼有什麼區別?
(我發現來自在線文檔這些功能,但不知道strncmp
因爲文檔略有不清楚。)
if(strncmp(buf, buf2, 7) == 0)
做同樣的事情,
if(memcmp(buf, buf2, 7) == 0)
buf
和buf2
是的char *數組或相似。
我打算把這個附加到另一個問題上,但後來決定也許最好單獨發佈它。據推測,答案要麼是微不足道的「是」,要麼不是那麼有什麼區別?
(我發現來自在線文檔這些功能,但不知道strncmp
因爲文檔略有不清楚。)
在C和C++字符串的結束由一個字節表示值爲0。 函數memcmp
不關心strig的結束,但在任何情況下都會比較指定的字節數。
與此相反,函數strncmp
將在值爲0的字節處停止,即使尚未達到要傳遞的比較字節數。
與strcmp()
類似,strncmp()
用於比較字符串,因此它停止比較何時在至少一個參數中找到字符串終止符。過去的任何差異都不會影響結果。 strncmp()
不同之處在於,如果它在那之前沒有遇到終止符,它也將停止在指定的字節數之後進行比較。另一方面,
memcmp()
用於比較隨機存儲器塊。它會比較每個塊的指定字節數,直到找到差值,而不管字節的值如何。也就是說,它不停止在字符串終止符處。
兩個很好的答案謝謝 – user3728501
strncmp()
和memcmp()
之間的主要區別在於,第一是明智至(停止在)'\0'
其中最新的是沒有的。如果來自buf
和buf2
的前7個字節的內存中不包含'\0'
,則行爲是相同的。
請看下面的例子:
#include <stdio.h>
#include <string.h>
int main(void) {
char buf[] = "123\0 12";
char buf2[] = "123\0 34";
printf("strncmp(): %d\n", strncmp(buf, buf2, 7));
printf("memcmp(): %d\n", memcmp(buf, buf2, 7));
return 0;
}
這將輸出:
strncmp(): 0
memcmp(): -2
因爲strncmp()
將在buf[3]
,停在那裏會找到一個'\0'
,其中memcmp()
將繼續,直到所有7個字節進行比較。
啊當然是啊 - 應該注意到,在我的問題 – user3728501
除了該方法的功能,memcmp()的實現可能實際上是不同的,因爲它可能被設計爲在整個單詞方面工作,而strncmp()很可能只用字節讀取來實現。如果性能問題,memcmp()可能會更快。 – MoDJ
謝謝,這也是有用的知道 – user3728501