C語言提供豐富的字串處理函數庫,大幅減輕程式設計負擔。依功能分類主要包含:輸入/輸出、串接、複製、比較、長度計算、搜尋、轉換等。使用前需引入對應頭檔案:
stdio.h:輸入/輸出函數(puts、gets、printf、scanf)string.h:字串操作函數(strcat、strcpy、strcmp、strlen 等)原型:int puts(const char *str)
功能:將字串輸出至標準輸出裝置(螢幕),自動在末尾換行。
特點:支援逸出字元(如 \n),可被 printf 取代,但格式化輸出時建議用 printf。
#include <stdio.h>
int main() {
static char c[] = "BASIC\ndBASE";
puts(c); // 輸出兩行:BASIC / dBASE
return 0;
}
原型:char *gets(char *str)
功能:從鍵盤讀取一行字串(含空格),以換行鍵 \n 為結束標誌。
回傳值:字串首位址。
與 scanf 差異:scanf("%s") 遇空格截斷,gets 讀取整行。
#include <stdio.h>
int main() {
char st[15];
printf("input string:\n");
gets(st);
puts(st);
return 0;
}
安全性警示:gets不檢查緩衝區邊界,易造成緩衝區溢位。現代 C 標準建議使用fgets()替代。
原型:char *strcat(char *dest, const char *src)
功能:將 src 字串附加到 dest 末尾,覆寫 dest 原本的結束符 \0。
回傳值:dest 的首位址。
關鍵要求:dest 必須有足夠空間容納串接後結果。
#include <stdio.h>
#include <string.h>
int main() {
static char st1[30] = "My name is ";
char st2[10];
printf("input your name:\n");
gets(st2);
strcat(st1, st2);
puts(st1);
return 0;
}
原型:char *strcpy(char *dest, const char *src)
功能:將 src 字串(含結束符 \0)複製到 dest。
用途:等同於字串指派(C 語言不支援陣列整體指派)。
注意:dest 必須預留足夠空間。
#include <stdio.h>
#include <string.h>
int main() {
static char st1[15], st2[] = "C Language";
strcpy(st1, st2);
puts(st1);
printf("\n");
return 0;
}
原型:int strcmp(const char *s1, const char *s2)
功能:依 ASCII 碼逐字元比較兩字串。
回傳值規則:
s1 > s2:回傳正值s1 < s2:回傳負值亦可比較字串常數或陣列與常數。
#include <stdio.h>
#include <string.h>
int main() {
int k;
static char st1[15], st2[] = "C Language";
printf("input a string:\n");
gets(st1);
k = strcmp(st1, st2);
if (k == 0) printf("st1=st2\n");
else if (k > 0) printf("st1>st2\n");
else printf("st1
原型:size_t strlen(const char *str)
功能:回傳字串實際長度(不含結束符 \0)。
回傳型別:size_t(無號整數)。
#include <stdio.h>
#include <string.h>
int main() {
int k;
static char st[] = "C language";
k = strlen(st);
printf("The length of the string is %d\n", k);
return 0;
}
strncat、strncpy、fgets 等帶長度限制的安全版本strcmp 基於 ASCII,多語言環境建議使用 strcoll(依區域設定比較)