在C語言中,字符和字符串的處理是基本且重要的概念。字符在C中通常由 char類型表示,而字符串則是以 null終止的字符數組。內存操作函數則提供了基本的內存處理能力,如複製、設置、比較等內存塊。

字符操作

字符使用 char類型聲明,C語言標準庫提供了一系列函數來檢查和轉換字符。頭文件 <ctype.h> 包含了字符操作的函數:

  • isalpha(): 檢查參數是否是字母。
  • isdigit(): 檢查參數是否是數字。
  • isalnum(): 檢查參數是否是字母或數字。
  • isupper(): 檢查參數是否是大寫字母。
  • islower(): 檢查參數是否是小寫字母。
  • toupper(): 將小寫字符轉換為大寫。
  • tolower(): 將大寫字符轉換為小寫。

字符串操作

C語言中,字符串本質上是以 null字符('\0')結尾的 char數組。頭文件 <string.h> 提供了一系列操作字符串的函數:

  • strlen(): 返回字符串的長度(不包括 '\0')。
  • strcpy(): 複製一個字符串到另一個。
  • strncpy(): 複製指定數量的字符到另一個字符串。
  • strcat(): 連接兩個字符串。
  • strncat(): 連接兩個字符串,但是可以指定連接的最大長度。
  • strcmp(): 比較兩個字符串。
  • strncmp(): 比較兩個字符串的前n個字符。
  • strchr(): 查找字符在字符串中的第一個出現。
  • strrchr(): 查找字符在字符串中的最後一個出現。
  • strstr(): 查找子字符串在另一個字符串中的第一個出現。
  • strspn(): 返回字符串中包含的一組字符的最大子串長度。
  • strcspn(): 返回字符串中不包含的一組字符的最大子串長度。
  • strpbrk(): 搜索字符串中任意多個特定字符中的第一個出現。
  • strtok(): 分割字符串為一系列的令牌。

內存操作

C語言提供了幾個直接對內存塊進行操作的函數,這些函數在 <string.h> 頭文件中聲明:

  • memcpy(): 從源內存地址複製n個字節到目標內存地址。
  • memmove(): 類似於 memcpy,但是更安全,可以處理源和目標內存區域重疊的情況。
  • memset(): 將一塊內存設置為特定的值。
  • memcmp(): 比較內存區域的前n個字節。

例子

以下是字符串和內存操作的簡單示例:

#include <stdio.h>
#include <string.h>

int main() {
    char str1[20] = "Example";
    char str2[20];

    // 字符串複製
    strcpy(str2, str1);
    printf("Copy of String: %s\n", str2);

    // 字符串連接
    strcat(str1, " String");
    printf("Concatenated String: %s\n", str1);

    // 字符串長度
    printf("Length of String: %lu\n", strlen(str1));

    // 內存設置
    memset(str2, 'A', sizeof(str2) - 1);
    str2[sizeof(str2) - 1] = '\0'; // 確保字符串是 null 終止的
    printf("Memory Set String: %s\n", str2);

    return 0;
}

運行上述代碼,將打印出經過操作後的字符串和設置內存後的結果。