在 C 语言中打印字符数组

Jinku Hu 2023年10月12日
  1. 在 C 语言中使用 for 循环打印字符数组的方法
  2. 使用 printf%s 指定符在 C 语言中打印字符数组
在 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
作者: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

DelftStack.com 创始人。Jinku 在机器人和汽车行业工作了8多年。他在自动测试、远程测试及从耐久性测试中创建报告时磨练了自己的编程技能。他拥有电气/电子工程背景,但他也扩展了自己的兴趣到嵌入式电子、嵌入式编程以及前端和后端编程。

LinkedIn Facebook

相关文章 - C Array