我已经在c
中编写了以下程序
#include <stdio.h>
char str[]="hello world";
unsigned char hexvalue[] = {0x01,0x02,0x03,0x04,0x05};
int main()
{
int i;
printf("string %s \n", str);
printf("array %x \n", hexvalue); //This line not print whole array why?
for (i=0;i<sizeof(hexvalue);i++)
{
printf ("%x\n",hexvalue[i]);
}
return 0;
}
这里
str
和hexvalue
都是指针,那么为什么当我尝试打印它们时它们都没有给出相同的输出? 最佳答案
就你而言printf("string %s \n", str);
之所以可以正常工作,是因为%s
需要一个指向以null终止的char
数组的指针,并且str
是(或至少衰减到)一个。printf("array %x \n", hexvalue);
之所以不起作用,是因为%x
需要一个unsigned int
作为参数,而hexvalue
则不是。而是产生undefined behaviour。
参考:C11标准,§7.21.6.1
如果任何参数都不是对应转换规范的正确类型,则行为未定义。
另外,请注意,推荐的main()
签名为int main(void)
。
关于c - 十六进制和字符数组打印有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30239736/