首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C語言字串處理函數完全指南:puts、gets、strcat、strcpy、strcmp、strlen

     編輯:關於C語言

字串函數分類與頭檔案需求

C語言提供豐富的字串處理函數庫,大幅減輕程式設計負擔。依功能分類主要包含:輸入/輸出、串接、複製、比較、長度計算、搜尋、轉換等。使用前需引入對應頭檔案:

  • stdio.h:輸入/輸出函數(puts、gets、printf、scanf)
  • string.h:字串操作函數(strcat、strcpy、strcmp、strlen 等)

六大常用字串函數詳細解析

1. puts - 字串輸出函數

原型:int puts(const char *str)
功能:將字串輸出至標準輸出裝置(螢幕),自動在末尾換行。
特點:支援逸出字元(如 \n),可被 printf 取代,但格式化輸出時建議用 printf。

#include <stdio.h>

int main() {
    static char c[] = "BASIC\ndBASE";
    puts(c);  // 輸出兩行:BASIC / dBASE
    return 0;
}

2. gets - 字串輸入函數

原型: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() 替代。

3. strcat - 字串串接函數

原型: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;
}

4. strcpy - 字串複製函數

原型: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;
}

5. strcmp - 字串比較函數

原型:int strcmp(const char *s1, const char *s2)
功能:依 ASCII 碼逐字元比較兩字串。
回傳值規則:

  • 相等:回傳 0
  • 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

6. strlen - 字串長度函數

原型: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;
}

實務應用建議

  1. 緩衝區安全:使用 strncat、strncpy、fgets 等帶長度限制的安全版本
  2. 記憶體管理:確保目的陣列空間足夠,避免緩衝區溢位
  3. 字元編碼:strcmp 基於 ASCII,多語言環境建議使用 strcoll(依區域設定比較)
  4. 效能考量:頻繁操作長字串時,考慮手動優化或使用專用庫
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved