庫函數strlen源碼重現及注意問題

首先直接上源碼:spa

size_t strlen (const char * str)
{
	const char *eos = str;
	while(*eos++);
	return(eos - str - 1);
}

能夠看到strlen是利用一個新的char*指針,一直向後遍歷,找到字符串結尾的\0,的下一個元素。而後計算距離。指針

可是這裏注意一點 size_t 實際上是 unsigned int 類型的。因此比較兩個字符串長度大小的時候不能使用 strlen(a) - strlen(b) 。由於兩個無符號的整型相減是得不到一個負數的,因此無論怎麼樣獲得的結果都是一個整數。也就是strlen(a)永遠大於strlen(b)。code

能夠使用 strlen(a) > strlen(b) 這個表達式判斷兩個字符串的大小,不能使用 strlen(a) - strlen(b) > 0 blog

相關文章
相關標籤/搜索