C 言語で文字配列を出力する
この記事では、C 言語で文字配列を出力する方法について複数の方法を紹介します。
for
ループを使って C 言語で文字配列を出力する
配列の要素を個別に出力して、より詳細に出力をフォーマットしたい場合は、for
ループが最もわかりやすい解決策です。このメソッドの重要な前提条件は、配列の長さを事前に知っておくことです。
while
ループのような他の反復メソッドを利用することもできますが、その場合は、反復を停止すべき値を知っておく必要があります。
次の例では、for
ループメソッドを用いて、6 文字配列に対して正確に 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
指定子 %s
を用いて printf
を用いて C 言語で文字配列を表示する
関数 printf
はフォーマットされた出力を行うための強力な関数です。これは型指定子を用いて入力変数を操作し、それに対応して変数を処理することができます。
すなわち、char
配列は内部的には C スタイルの文字列と同じ構造を持っていますが、C スタイルの文字列は常に \0
バイトで終点を示します。char
配列の最後にヌルバイトを追加すれば、一行の printf
コールで配列全体を出力することができます。
終端のヌルバイトを指定せずにこのメソッドで 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
ご覧のように、ヌルターミネータが指定されていない arr1
を出力すると、ヌルターミネータが 1つになるまで文字数が増えていきます。
関数 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