C 語言中的字串陣列

Jinku Hu 2023年10月12日
  1. 使用二維陣列符號在 C 語言中宣告字串陣列
  2. 在 C 語言中使用 char*陣列符號來宣告字串陣列
C 語言中的字串陣列

本文將演示關於如何在 C 語言中宣告一個字串陣列的多種方法。

使用二維陣列符號在 C 語言中宣告字串陣列

C 語言中的字串只是儲存在連續記憶體區域中的字元序列。關於字串的一個區別是,在序列的最後儲存了一個終止的空位元組/0,表示一個字串的結束。如果我們用 [] 符號宣告一個固定的 char 陣列,那麼我們就可以在該位置儲存一個由相同數量的字元組成的字串。

需要注意的是,在將字元字串複製到陣列位置時,應該考慮多出一個終止空位元組的字元空間。因此,可以用括號符號宣告一個二維的 char 陣列,並利用它作為字串的陣列。陣列的二維將限制字串的最大長度。在這種情況下,我們任意定義一個巨集常量-MAX_LENGTH 等於 100 個字元。整個陣列可以用 {""} 符號初始化,將陣列中的每個 char 元素清零。當在已經初始化的陣列中儲存字串值時,不允許使用賦值運算子,應使用特殊的記憶體複製函式,如 strcpy

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

#define MAX_LENGTH 100
#define NUM_STRINGS 10

int main() {
  char arr[NUM_STRINGS][MAX_LENGTH] = {""};

  arr2[0] = "string literal";  // Not permitted
  strcpy(arr[0], "hello world");
  printf("%s\n", arr[0]);
  printf("%s\n", strcpy(arr[0], "hello world"));

  exit(EXIT_SUCCESS);
}

輸出:

hello world
hello world

另外,我們也可以在宣告二維字元陣列時立即初始化。現代 C11 標準允許用字串字元初始化 char 陣列,甚至當陣列長度大於字串本身時,可以自動在字串末尾儲存空位元組。初始化列表的符號與 C++ 語法類似。每一個大括號的元素都應該儲存在一個長度為 MAX_LENGTH 的連續記憶體區域。如果初始化器符號指定的元素少於陣列大小,那麼剩餘的元素將被隱式初始化為\0 位元組。

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

#define MAX_LENGTH 100
#define NUM_STRINGS 10

int main() {
  char arr2[NUM_STRINGS][MAX_LENGTH] = {{"first string"},
                                        {"second string"},
                                        {"third string"},
                                        {"fourth string"},
                                        {"fifth string"}};

  for (int i = 0; i < NUM_STRINGS; ++i) {
    printf("%s, ", arr2[i]);
  }

  exit(EXIT_SUCCESS);
}

輸出:

first string, second string, third string, fourth string, fifth string, , , , , ,

在 C 語言中使用 char*陣列符號來宣告字串陣列

char*是通常用於儲存字串的型別。宣告 char*的陣列,我們就可以得到固定數量的指標,指向相同數量的字串。它可以用字串字元初始化,如下面的例子所示,也可以使用頭 <string.h> 中提供的特殊函式分配或複製。

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

#define MAX_LENGTH 100
#define NUM_STRINGS 10

int main() {
  char* arr3[NUM_STRINGS] = {"first string", "second string", "third string",
                             "fourth string", "fifth string"};
  char* str1 = "string literal";
  arr3[8] = str1;
  arr3[9] = "hello there";

  for (int i = 0; i < NUM_STRINGS; ++i) {
    printf("%s, ", arr3[i]);
  }
  printf("\n");

  exit(EXIT_SUCCESS);
}

輸出:

first string, second string, third string, fourth string, fifth string, (null), (null), (null), string literal, hello there,

另一種選擇是,我們可以只指定 {} 括號,這將使陣列中的指標初始化為 null,它們可以在以後用於儲存其他字串地址,或者程式設計師甚至可以分配動態記憶體。

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

#define NUM_STRINGS 10

int main() {
  char *arr4[NUM_STRINGS] = {};
  for (int i = 0; i < NUM_STRINGS; ++i) {
    printf("%s, ", arr4[i]);
  }
  printf("\n");

  exit(EXIT_SUCCESS);
}

輸出:

(null), (null), (null), (null), (null), (null), (null), (null), (null), (null),
作者: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

DelftStack.com 創辦人。Jinku 在機器人和汽車行業工作了8多年。他在自動測試、遠端測試及從耐久性測試中創建報告時磨練了自己的程式設計技能。他擁有電氣/ 電子工程背景,但他也擴展了自己的興趣到嵌入式電子、嵌入式程式設計以及前端和後端程式設計。

LinkedIn Facebook

相關文章 - C Array

相關文章 - C String