Like Share Discussion Bookmark Smile

J.J. Huang   2019-10-18   C C 語言技術 <201910>   瀏覽次數:次   DMCA.com Protection Status

C語言 - 第十四章 | 字串 - 長度、複製、串接

長度

字串是一個字元陣列,最後一個字元以空字元'\0'結尾,若要得知字串所含字元長度(不包括空字元),則可以使用strlen()函式:

1
size_t strlen(const char*);
  • size_tunsigned型態,在大部份系統是定義為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
字串長度、複製、串接