本文目錄一覽:
C語言小程序:兩字元串為什麼不相等?
比較兩個字元串是否相等,要用strcmp函數。不能直接用==比較,用==比較的是兩個字元串的首地址。
C語言 字元串相等的問題
字元串的比較是逐個比較的,字元串最後一位為「\0」,while循環完,指針均指向字元串尾部,if()判斷為真,說明是2個相等的字元串,返回1,不相等返回0;scanf()是要存放的變數的地址,這個是有標準的;c是比較底層的,可以讓我們詳細知道函數的運作,不比其它語言,只知道怎麼用便可
C語言測試字元串是否相等,為什麼下面兩個字元串被認為不等,可如果我把字元空間擴大到十以上又相等了?
1~9有九個數,你的數組長度只有9.你的字元串結束標記「 \0」存在哪裡的?
請把數組長度都先改成10或以上.
arr[8] == ‘9’ arr[8] 後面的東西你知道是什麼東西么? 天知道內存順序是怎麼分配的,天知道你不申請足夠的內存,那個『\0』什麼時候才會遇到。
天知道arr[8] tmp[8]之後是什麼? 你沒有手動設置 \0 或沒有足夠的空間讓編譯器幫助你添加’\0′ 結束標記,程序就一直往後面找直到有一個結束.
***
思考一下:假如你是一個 strcmp函數,別人傳入的參數就只有兩地字元串的首地址,你從這兩個首地址對應的字元開始比較,一個一個往後比較,什麼時候停止了? 莫非不停止比到天荒地老.
先學習正確的寫法,錯誤的寫法為什麼有時候會錯有時候會對先別研究了。
理解一下strcmp的實現邏輯.
int strcmp( char* s , char* t)
{
int ret_val = 0;
while(*s *t) /* 兩個同時不為結束標誌 */
{
if(*s *t)
{
return 1;
}
else if(*s == *t)
{
/*若相等則去比較下一個字元*/
s++;
t++;
}
else
{
return -1;
}
}
/*其中有一個為0*/
if(*s *t)
{
/* *s != 0 , *t == 0 */
return 1;
}
else if(*s == *t)
{
/* 兩個都為0 */
return 0;
}
else
{
/* *s == 0 , *t != 0 */
return -1;
}
}
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/193166.html