C語言 - 第十四章 | 字串 - 長度、複製、串接
長度
字串是一個字元陣列,最後一個字元以空字元'\0'
結尾,若要得知字串所含字元長度(不包括空字元),則可以使用strlen()
函式:
1
| size_t strlen(const char*);
|
size_t
是unsigned
型態,在大部份系統是定義為unsigned int
,但在64
位元系統中可以是unsigned long
。
strlen()
會傳回字元陣列中第一個字元至空字元的長度值減1
。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| #include <stdio.h> #include <string.h>
int main() { char input[100];
puts("請輸入字串..."); scanf("%s", input);
size_t length = strlen(input); printf("字串長度:%lu\n", length);
return 0; }
|
註:字串相關處理函式是定義在string.h
中,所以要將其#include
。
如果使用fgets()
的話,要注意它會包括最後按下Enter
的換行字元。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| #include <stdio.h> #include <string.h>
int main() { char input[100];
puts("請輸入字串..."); fgets(input, sizeof(input) / sizeof(input[0]), stdin);
size_t length = strlen(input); printf("字串長度:%lu\n", length);
return 0; }
|
複製
字串複製,可以使用strcpy()
函式,若要複製字串中若干字元內容,則可以使用strncpy()
。
1 2
| char* strcpy(char*, const char*); char* strncpy(char*, const char*, size_t);
|
- 第一個參數是目的字元陣列
- 第二個參數是來源字串
strncpy()
第三個參數則是要複製的字元長度
注:strncpy()
不會自動在目的陣列加上空字元,它只是單純的複製指定長度的字元。
想要在使用strncpy()
後,可以將目的字串陣列當作字串來使用,所以使用memset()
函式將所有字元重設為空字元。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| #include <stdio.h> #include <string.h>
int main() { char input[100]; char copied[100];
puts("請輸入字串..."); fgets(input, sizeof(input) / sizeof(input[0]), stdin);
strcpy(copied, input); printf("複製整個字串:%s\n", copied);
memset(copied, '\0', sizeof(copied));
strncpy(copied, input, 4); printf("複製部份字串:%s\n", copied);
return 0; }
|
串接
串接兩個字串,則要使用strcat()
,若要串接部份字串,則可以使用strncat()
。
1 2
| char* strcat(char*, const char*); char* strncat(char*, const char*, size_t);
|
第二個參數的字串會串接到第一個參數之後,所以第一個參數必須保留足夠的空間作為串接時使用。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| #include <stdio.h> #include <string.h>
int main() { char str1[100] = "morose"; char str2[] = "dog";
printf("串接前:%s\n", str1);
strcat(str1, str2); printf("串接後:%s\n", str1);
strncat(str1, str2, 2); printf("串接後:%s\n", str1);
return 0; }
|
註:以上參考了
hackersir gitbooks
字串長度、複製、串接