在 C 語言中初始化字元陣列

Jinku Hu 2023年10月12日
  1. 使用 {} 捲曲括號列表符號在 C 語言中初始化一個字元陣列
  2. 使用字串賦值來初始化 C 語言中的字元陣列
  3. 使用 {{ }} 雙大括號在 C 語言中初始化 2D 字元陣列
在 C 語言中初始化字元陣列

本文將演示如何在 C 語言中初始化一個字元陣列的多種方法。

使用 {} 捲曲括號列表符號在 C 語言中初始化一個字元陣列

字元陣列大多被宣告為一個固定大小的結構,並經常被立即初始化。大括號列表符號是用常量值初始化字元陣列的可用方法之一。可以只指定大括號中的部分元素,因為字元陣列的剩餘部分被隱式地用空位元組值初始化。如果需要將字元陣列列印成字串,這就很有用。由於保證在有效字元的末尾有一個空位元組字元,那麼可以有效地利用 printf 函式和%s 格式字串指定符來輸出陣列的內容。

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

void printCharArray(char *arr, size_t len) {
  printf("arr: ");
  for (int i = 0; i < len; ++i) {
    printf("%c, ", arr[i]);
  }
  printf("\n");
}

enum { LENGTH = 21, HEIGHT = 5 };

int main() {
  char c_arr[LENGTH] = {'a', 'b', 'c', 'd', 'e', 'f', 'g'};
  printCharArray(c_arr, LENGTH);

  exit(EXIT_SUCCESS);
}

輸出:

arr: a, b, c, d, e, f, g, , , , , , , , , , , , , , ,

使用字串賦值來初始化 C 語言中的字元陣列

另一種初始化字元陣列的有用方法是在宣告語句中指定一個字串值。字串的字元數應少於陣列的長度;否則,將只儲存字串的一部分,並且在緩衝區的最後沒有終止的空字元。因此,如果使用者試圖用%s 指定符來列印陣列的內容,它可能會訪問最後一個字元之後的記憶體區域,並可能會丟擲一個故障。

請注意,c_arr 的長度為 21 個字元,並且初始化為 20 個 char 長字串。因此,陣列中的第 21 個字元保證是\0 位元組,使內容成為一個有效的字串。

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

void printCharArray(char *arr, size_t len) {
  printf("arr: ");
  for (size_t i = 0; i < len; ++i) {
    printf("%c, ", arr[i]);
  }
  printf("\n");
}

enum { LENGTH = 21, HEIGHT = 5 };

int main() {
  char c_arr[LENGTH] = "array initialization";
  char c_arr2[LENGTH] = "array initialization.f";
  printCharArray(c_arr, LENGTH);
  printCharArray(c_arr2, LENGTH);
  printf("%s\n", c_arr);
  printf("%s\n", c_arr2);

  exit(EXIT_SUCCESS);
}

輸出:

arr: a, r, r, a, y,  , i, n, i, t, i, a, l, i, z, a, t, i, o, n,  ,
arr: a, r, r, a, y,  , i, n, i, t, i, a, l, i, z, a, t, i, o, n, .,
array initialization
array initialization.//garbage values//

使用 {{ }} 雙大括號在 C 語言中初始化 2D 字元陣列

大括號列表也可用於初始化二維字元陣列。在本例中,我們宣告一個 5x5 的字元陣列,並在外層大括號中包含五個大括號。請注意,本例中的每個字串文字都初始化了矩陣的五個元素行。這個二維陣列的內容不能用%s 指定符列印,因為每行的長度與字串字元的長度相匹配;因此,在初始化過程中,沒有隱含地儲存終止的空位元組。通常情況下,如果字串的長度大於陣列的行數,編譯器會發出警告。

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

enum { LENGTH = 5, HEIGHT = 5 };

int main() {
  char c_arr[HEIGHT][HEIGHT] = {
      {"hello"}, {"there"}, {"multi"}, {"dimen"}, {"sion."}};

  for (size_t i = 0; i < HEIGHT; ++i) {
    for (size_t j = 0; j < HEIGHT; ++j) {
      printf("%c, ", c_arr[i][j]);
    }
    printf("\n");
  }
  printf("\n");

  exit(EXIT_SUCCESS);
}

輸出:

h, e, l, l, o,
t, h, e, r, e,
m, u, l, t, i,
d, i, m, e, n,
s, i, o, n, .,
作者: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

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

LinkedIn Facebook

相關文章 - C Array