【问题标题】:Printing array of characters using printf使用 printf 打印字符数组
【发布时间】:2016-02-11 19:50:33
【问题描述】:

有没有一种方法可以使用 'printf' 按以下方式打印字符数组(我知道这不是正确的 C 代码,我想知道是否有替代方法可以产生相同的结果)。

printf("%s", {'h', 'e', 'l', 'l', 'o' });

【问题讨论】:

  • printf("%s", "hello");
  • 很遗憾,它们必须采用字符数组格式('h'、'e'、'l'、'l'、'o')。
  • 那是它需要打印的格式?在这种情况下,您需要使用循环
  • printf("%.5s", (char[]){'h', 'e', 'l', 'l', 'o' });
  • @Michi 他说他想使用语法{'h','e','l','l','o'} 进行打印。里面没有'\0'。我对这个问题的解释是他不想改变数组。如果您以不同的方式阅读问题,那是您的特权,您可以发布自己的答案或要求 OP 澄清。

标签: c arrays char printf


【解决方案1】:

一个简单的while循环怎么样?当然,假设数组是空终止的。如果没有 - 您需要调整以计算数组中的字符数。

char a[] = {'h','e','l','l','o','\0'};
int i = 0;
while (a[i] != "\0")
{
   printf ("%c,", a[i]);
   i++;
}

输出:

h,e,l,l,o,

注意:不要char** 上试试这个!这仅适用于char[]

【讨论】:

  • 将一个字符与NULL进行比较是没有意义的。
  • @PaulGriffiths:已修复。
  • 这一行:while (a[i] != "\0") 将无法按预期工作。建议:while (a[i] != '\0') 检查字符,而不是字符串
【解决方案2】:

这可行,但数组的长度必须在格式字符串中硬编码或作为参数,否则数组必须定义两次(可能由一个宏定义),以便它的大小可以由编译器:

printf("%.5s", (char []) {'h', 'e', 'l', 'l', 'o' });

【讨论】:

  • 相信你也可以将格式字符串中的长度指定为变量:printf("%*s", length, array);
  • 这并没有改变它必须是硬编码或取自数组的第二个实例(通过 sizeof())的事实(这当然仍然是在编译时完成的,但除非两个实例都由宏扩展提供,否则错误可能会蔓延)
  • 为什么必须在编译时完成?这可能在一个采用char*int 的函数中。为什么你需要另一个 sizeof 的副本? char arr[] = { 'a', 'b', 'c' }; int len = sizeof(arr);
  • 应该是%.5s,而不是%5s
  • 假设——它们是危险的东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多