C 語言中的字串陣列
本文將演示關於如何在 C 語言中宣告一個字串陣列的多種方法。
使用二維陣列符號在 C 語言中宣告字串陣列
C 語言中的字串只是儲存在連續記憶體區域中的字元序列。關於字串的一個區別是,在序列的最後儲存了一個終止的空位元組/0
,表示一個字串的結束。如果我們用 []
符號宣告一個固定的 char
陣列,那麼我們就可以在該位置儲存一個由相同數量的字元組成的字串。
需要注意的是,在將字元字串複製到陣列位置時,應該考慮多出一個終止空位元組的字元空間。因此,可以用括號符號宣告一個二維的 char
陣列,並利用它作為字串的陣列。陣列的二維將限制字串的最大長度。在這種情況下,我們任意定義一個巨集常量-MAX_LENGTH
等於 100 個字元。整個陣列可以用 {""}
符號初始化,將陣列中的每個 char
元素清零。當在已經初始化的陣列中儲存字串值時,不允許使用賦值運算子,應使用特殊的記憶體複製函式,如 strcpy
。
#include <stdlib.h>
#include <string.h>
#include <stdio.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 <stdlib.h>
#include <string.h>
#include <stdio.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 <stdlib.h>
#include <string.h>
#include <stdio.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 <stdlib.h>
#include <string.h>
#include <stdio.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),
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn