C語言:Strlen()函數你瞭解多少?

一、strlen()函數的介紹及用法

C語言中strlen是一種函數,主要用於計算字符串的長度。

strlen()從字符串的開頭位置依次往後面計數,直到遇到‘’停止,所計算的字符串大小為‘’以前的字符所計算的值,最終的字符串長度不包括‘’

strlen因為是一種函數,因此調用這個函數需要引用的頭文件是<string.h>,它的原型是size_t strlen(const char* str);str表示的是需要計算長度的字符串,由此看出傳參的時候應該傳的是一個地址而不是一個數值

下面是利用strlen函數求字符串長度的一個例子

為瞭讓大傢更好的理解,小編又畫瞭個圖幫助大傢理解strlen函數的計算

通過這個例子是不是對strlen函數有瞭一定的瞭解瞭呢

二、strlen函數與sizeof函數的區分

⭕有許多初學者可能會混淆sizeof()和strlen()兩個的用法,對於同一個字符串來說sizeof()計算的字符串會包含‘’,而strlen()不會包含,因此用sizeof計算的字符串大小會多一個字節,我們來看下面這個例子

用strlen函數計算的字符串遇到‘’則停止,計算瞭''前面所有字符的大小,而sizeof則是把''也包含在瞭裡面,因此比strlen函數計算的多出瞭一個字節的大小

三、strlen函數的運用筆試題

既然已經對strlen函數有瞭一定的認識,那我們通過做一些題目來鞏固一下吧✊

動手畫畫圖可以更好地幫助理解


下面即將公佈答案,看看自己是否已經掌握瞭呢

四、筆試題解析

看到答案是不是有些題覺得不可思議呢 不用著急小編這就帶著大傢來揭開迷霧

1️⃣ printf("%dn", strlen(arr))——輸出結果:6

解釋:arr表示的是數組arr首元素的地址,strlen(arr)從首元素a開始往後計數,遇到''停止,並且返回''前面的計數,因此為6個字節

2️⃣printf("%dn", strlen(arr + 0))——輸出結果:6

解釋:arr表示的是數組arr首元素的地址,因此(arr+0)代表的仍是首元素地址,strlen(arr+0)從首元素a開始往後計數,遇到''停止,並且返回''前面的計數,因此為6個字節

3️⃣printf("%dn", strlen(*arr))——無法輸出結果

解釋:看到這題的答案是不是瞪大瞭卡姿蘭大眼睛感到很疑惑呢,由圖我們可以看到strlen(*arr)是無法輸出結果的,這是為什麼呢?這還得回歸到strlen函數的原型,它的原型是size_t strlen(const char* str),可以看出strlen接受的是一個地址,而*arr表示的是數組首元素的值,因此不符合傳參的要求,所以無法得出結果

4️⃣printf("%dn", strlen(arr[1]))——無法輸出結果

解釋:arr[1]表示的是數組第二個元素的值,同理3️⃣可得,此題也無法得出結果

5️⃣printf("%dn", strlen(&arr))——輸出結果:6

解釋:&arr表示的是整個數組的地址(具體內容可以看小編前幾天發佈的文章),從首元素a開始往後計數,遇到''停止,並且返回''前面的計數,因此為6個字節

6️⃣printf("%dn", strlen(&arr+1))——輸出結果:隨機值

解釋:&arr表示的是整個數組的地址(具體內容可以看小編前幾天發佈的文章),(&arr+1)則表示的是跳過數組的後面那一塊空間的首地址,後面的空間是未知的,不知道什麼時候會再遇到‘’,所以strlen(&arr+1)就是一個隨機值

7️⃣printf("%dn", strlen(&arr[0]+1))——輸出結果:5

解釋:&arr[0]取出的是數組第一個元素的地址,所以(&arr[0]+1)就是數組第二個元素的地址,strlen(&arr[0]+1)從數組第二個元素開始計數,遇到''停止,並且返回''前面的計數,因此為5個字節

看完解釋有沒有感覺豁然開朗的感覺⛅


初次創作,內容如有錯誤歡迎各位大神批評指正 大傢如果覺得有幫助的話點個贊支持一下博主喔✊✊後續還會繼續更新其他的筆試題給到大傢,如感興趣可以多多關註一下博主

赞(0)