本篇 ShengYu 介紹 C/C++ strlen 的用法與範例,C/C++ 可以使用 strlen 來計算字串長度,但不包括結束字元 '\0'
。
C/C++ 要使用 strlen 的話需要引入的標頭檔 <string.h>
,如果要使用 C++ 的標頭檔則是引入 <cstring>
,
strlen 函式原型為1
size_t strlen(const char * str);
str:欲計算字串長度的字元陣列
C/C++ strlen 計算字串長度的基本用法
這邊介紹 C/C++ strlen 來計算字元陣列裡的字串長度,strlen 計算字串長度是不包含結束字元 '\0'
,1
2
3
4
5
6
7
8
9
10
11// g++ cpp-strlen.cpp -o a.out
int main() {
char arr[] = "hello";
printf("Length of string is: %d\n", (int)strlen(arr));
return 0;
}
結果輸出如下,1
Length of string is: 5
這邊示範另外一種使用情境,字元陣列分別初始化每個字元,並之後計算該字串長度,1
2
3
4
5
6
7
8
9
10
11// g++ cpp-strlen2.cpp -o a.out
int main() {
char arr[] = {'h', 'e', 'l', 'l', 'o', '\0'};
printf("Length of string is: %d\n", (int)strlen(arr));
return 0;
}
輸出同上。
這邊介紹另外一種使用情境,初始化一個 const 字串,並之後計算該字串長度,1
2
3
4
5
6
7
8
9
10
11// g++ cpp-strlen3.cpp -o a.out
int main() {
const char *arr = "hello";
printf("Length of string is: %d\n", (int)strlen(arr));
return 0;
}
輸出同上。
這邊介紹另外一種使用情境,使用 malloc 配置一塊指向字元陣列指標,並用 strcpy 複製字串,之後計算該字串長度,1
2
3
4
5
6
7
8
9
10
11
12
13
14// g++ cpp-strlen4.cpp -o a.out
int main() {
char *arr = NULL;
arr = (char *)malloc(sizeof(char) * 64);
strcpy(arr, "hello");
printf("Length of string is: %d\n", (int)strlen(arr));
free(arr);
return 0;
}
輸出同上。
這邊介紹另外一種使用情境,取得使用者輸入的字串,並計算該字串長度,使用 gets 取得輸入是不安全的,因為給 gets 一個緩衝區但是卻沒有告訴它這個緩衝區到底有多大,也不知道輸入的字串到底有多大,輸入的字串可能超出緩衝區,而引起程式崩潰,解決方法是使用 fgets 替代,fgets 取得標準輸入時會將換行字元讀取進來,而 strlen 計算字串長度是會包含換行字元的,所以在這邊會將換行字元取代成結束字元。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16// g++ cpp-strlen5.cpp -o a.out
int main() {
char arr[128] = {0};
// gets(arr); // unsafe
fgets(arr, 128, stdin);
int len = (int)strlen(arr);
if (arr[len-1] == '\n') // remove '\n'
arr[len-1] = '\0';
printf("Input: %s\n", arr);
printf("Length of string is: %d\n", (int)strlen(arr));
return 0;
}
gets 在某些平台下執行程式時會顯示警告訊息,例如在 macOS 平台下會顯示 warning: this program uses gets(), which is unsafe.
。
以上就是 C/C++ strlen 的用法與範例介紹,
如果你覺得我的文章寫得不錯、對你有幫助的話記得 Facebook 按讚支持一下!
其它參考
strlen - C++ Reference
https://www.cplusplus.com/reference/cstring/strlen/
其它相關文章推薦
如果你想學習 C++ 相關技術,可以參考看看下面的文章,
C/C++ 新手入門教學懶人包
C/C++ fgets 用法與範例
C/C++ malloc 用法與範例
C/C++ strcmp 用法與範例