C/C++ strlen 用法與範例

本篇 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'

cpp-strlen.cpp
1
2
3
4
5
6
7
8
9
10
11
// g++ cpp-strlen.cpp -o a.out
#include <stdio.h>
#include <string.h>

int main() {
char arr[] = "hello";

printf("Length of string is: %d\n", (int)strlen(arr));

return 0;
}

結果輸出如下,

1
Length of string is: 5

這邊示範另外一種使用情境,字元陣列分別初始化每個字元,並之後計算該字串長度,

cpp-strlen2.cpp
1
2
3
4
5
6
7
8
9
10
11
// g++ cpp-strlen2.cpp -o a.out
#include <stdio.h>
#include <string.h>

int main() {
char arr[] = {'h', 'e', 'l', 'l', 'o', '\0'};

printf("Length of string is: %d\n", (int)strlen(arr));

return 0;
}

輸出同上。

這邊介紹另外一種使用情境,初始化一個 const 字串,並之後計算該字串長度,

cpp-strlen3.cpp
1
2
3
4
5
6
7
8
9
10
11
// g++ cpp-strlen3.cpp -o a.out
#include <stdio.h>
#include <string.h>

int main() {
const char *arr = "hello";

printf("Length of string is: %d\n", (int)strlen(arr));

return 0;
}

輸出同上。

這邊介紹另外一種使用情境,使用 malloc 配置一塊指向字元陣列指標,並用 strcpy 複製字串,之後計算該字串長度,

cpp-strlen4.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// g++ cpp-strlen4.cpp -o a.out
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

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 計算字串長度是會包含換行字元的,所以在這邊會將換行字元取代成結束字元。

cpp-strlen5.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// g++ cpp-strlen5.cpp -o a.out
#include <stdio.h>
#include <string.h>

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 用法與範例