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

C Primer Plus 第 11 章:字串與字串函式完整指南

     編輯:關於C語言

第 11 章 字串與字串函式

11.1 字串表示與 I/O 基礎

C 語言中字串以空字元 \0 結尾的 char 陣列形式存在。

11.1.1 字串常值

字串常值(字串字面值)是雙引號括起的字元序列,編譯器自動在末尾附加 \0。相鄰字串常值會被連接:"How are" "you" 等同 "How are you"。字串中需包含雙引號時用 \" 轉義。字串常值屬靜態儲存類別,程式執行期間只儲存一份。

11.1.2 字串陣列與初始化

宣告陣列大小須確保至少比字串長度多 1(留給 \0)。未使用元素自動初始化為 0(即 \0)。陣列名同樣是首元素地址。

11.1.3 陣列與指標的差異

char heart[] = "I love Tillie!";
char *head = "I love Millie!";

核心差異:heart 是常數(陣列名),head 是變數(指標)。兩者皆可用下標與指標算術,但只有指標可用遞增運算子。陣列元素可修改,陣列名不可修改。宣告指標時加 const 可防止意外修改字串內容。const char *mytal1[5] 是指標陣列(存 5 個地址),char mytal2[5][81] 是二維字元陣列(存 5 個完整字串)。

11.2 字串輸入函式

  • gets():讀取換行前所有字元,附加 \0,返回指標或 NULL。不安全,無緩衝區長度檢查。
  • fgets():指定最大讀入字元數 n,最多讀 n-1 字元或遇換行為止;保留換行字元;第三參數指定輸入流(鍵盤用 stdin)。
  • scanf("%s"):以空白分隔讀取單字,非整行字串。

11.3 字串輸出函式

  • puts():輸出字串並自動換行。
  • fputs():面向檔案版本,需指定輸出流(螢幕用 stdout),不自動換行。
  • printf():格式化輸出字串。

11.4 自訂字串 I/O 函式

void put1(const char *string) {
    while (*string != '\0') putchar(*string++);
    // 熟練者可簡寫為 while (*string) putchar(*string++);
}

11.5 常用字串函式

函式功能備註
strlen(s)回傳字串長度(不含 \0)
strcat(s1, s2)將 s2 附加到 s1 末尾s1 需有足夠空間,回傳 s1
strncat(s1, s2, n)最多附加 n 字元遇 \0 停止
strcmp(s1, s2)比較字串(機器編碼順序)先於負值、相等 0、後於正值
strncmp(s1, s2, n)最多比較 n 字元
strcpy(s1, s2)複製 s2 到 s1回傳 s1,可複製部分陣列
strncpy(s1, s2, n)最多複製 n 字元不足補 \0,超過不加 \0
sprintf(s, fmt, ...)格式化寫入字串類似 printf 但輸出到字串

11.6 命令列參數

int main(int argc, char *argv[]) {
    // argc 含程式名在內的參數個數
    // argv[0] 為程式名,argv[1]... 為各參數
}

執行 repeat "I am hungry" now 時 argc = 3(雙引號將中間合為一參數)。

11.7 字串轉數值函式

long strtol(const char *nptr, char **endptr, int base);
double strtod(const char *nptr, char **endptr);

base 指定進制(10 進制、16 進制等)。endptr 指向轉換結束處的字元。例如 "10atom" 在 base 10 時轉為 10,endptr 指向 'a';base 16 時 'a' 視為有效十六進位數字,轉為 266。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved