在 C 語言中列印字元陣列
本文將介紹關於如何在 C 語言中列印字元陣列的多種方法。
在 C 語言中使用 for
迴圈列印字元陣列的方法
如果我們想分別列印陣列元素,並以更多的細節格式化輸出,for
迴圈是最明顯的解決方案。該方法的關鍵前提是,我們應該事先知道陣列的長度。
需要注意的是,我們可以使用其他的迭代方法,比如 while
迴圈,但是我們應該知道迭代應該在什麼時候停止的值,否則,迭代就會越界丟擲錯誤。
在下面的例子中,我們演示了 for
迴圈方法,並對六個字元的陣列精確地迭代了 6 次。
#include <stdio.h>
#include <stdlib.h>
#define STR(num) #num
int main(void) {
char arr1[] = { 'a', 'b', 'c', 'd', 'e', 'f' };
printf(STR(arr1)": ");
for (int i = 0; i < 6; ++i) {
printf("%c, ", arr1[i]);
}
printf("\b\b\n");
exit(EXIT_SUCCESS);
}
輸出:
arr1: a, b, c, d, e, f
使用 printf
與%s
指定符在 C 語言中列印字元陣列
printf
函式是一個強大的格式化輸出函式。它可以對輸入變數進行型別指定符的操作,並對變數進行相應的處理。
也就是說,字元陣列內部的結構與 C 式字串相同,只是 C 式字串的字元總是以\0
位元組結束,表示結束點。如果我們在字元陣列的末尾加上 null
位元組,我們可以通過單行 printf
呼叫列印整個陣列。
如果沒有指定結束的 null
位元組,並且用這個方法呼叫 printf
,程式可能會嘗試訪問記憶體區域,這很可能會導致分段錯誤。
#include <stdio.h>
#include <stdlib.h>
#define STR(num) #num
int main(void) {
char arr1[] = { 'a', 'b', 'c', 'd', 'e', 'f' };
char arr2[] = { 't', 'r', 'n', 'm', 'b', 'v', '\0' };
printf("%s\n", arr1);
printf("%s\n", arr2);
exit(EXIT_SUCCESS);
}
輸出:
abcdeftrnmbv
trnmbv
正如你所看到的,當我們列印沒有 null
結束符的 arr1
時,我們會得到更多的字元,直到迭代到一個 null
結束符-\0
。
另一種使 printf
函式特殊化的方法是在%s
指定符內傳遞字串中的字元數。一種方法是在符號%
和 s
之間用整數硬編碼字串的長度,也可以用*
符號代替,從 printf
引數中取另一個整數引數。請注意,這兩種方法都在數字或星號前加上 .
字元。
#include <stdio.h>
#include <stdlib.h>
#define STR(num) #num
int main(void) {
char arr1[] = { 'a', 'b', 'c', 'd', 'e', 'f' };
char arr2[] = { 't', 'r', 'n', 'm', 'b', 'v', '\0' };
printf("%.6s\n", arr1);
printf("%.*s\n", (int)sizeof arr1, arr2);
exit(EXIT_SUCCESS);
}
輸出:
abcdef
trnmbv
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