C 使用printf打印字符数组

C 使用printf打印字符数组,c,arrays,char,printf,C,Arrays,Char,Printf,是否有一种方法可以使用“printf”以以下方式打印字符数组(我知道这不是正确的C代码,我想知道是否有其他方法可以产生相同的结果) 简单的while循环怎么样?当然,假设数组以null结尾。如果没有-您需要调整以计算数组中的字符数 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, 注意:请勿在字符*

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


简单的while循环怎么样?当然,假设数组以null结尾。如果没有-您需要调整以计算数组中的字符数

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[]

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

printf("%.5s", (char []) {'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澄清。我相信您也可以将格式字符串中的长度指定为变量:
printf(“%*s”,长度,数组)
这并没有改变这样一个事实,即它必须是硬编码的,或者是从数组的第二个实例(通过sizeof())获取的(当然,这仍然是在编译时完成的,但是除非两个实例都是由宏扩展提供的,否则错误可能会悄悄进入),为什么必须在编译时完成?这可能是在一个接受
char*
int
的函数中。为什么你需要另一份sizeof<代码>字符arr[]={'a','b','c'};int len=sizeof(arr)
应该是
%.5s
,而不是
%5s
假设——它们是危险的东西。将字符与
NULL进行比较毫无意义。
@PaulGriffiths:fixed。此行:
while(a[i]!=“\0”)
将无法按预期工作。建议:
while(a[i]!='\0')
作为检查字符,而不是字符串
printf("%.5s", (char []) {'h', 'e', 'l', 'l', 'o' });