在 C 语言中打印字符数组
Jinku Hu
2023年10月12日
本文将介绍关于如何在 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
作者: Jinku Hu