hex和char数组打印有什么区别?

时间:2015-05-14 12:17:22

标签: c arrays char printf format-specifiers

我在storeFlagsOperationWithFolder

中写了以下程序
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都是指针,那么当我尝试打印它们时它们都没有给出相同的输出?

4 个答案:

答案 0 :(得分:3)

在你的情况下

  • printf("string %s \n", str);

正常工作,因为,%s期望指向以空值终止的char数组的指针,而str是(或,至少,衰变为

  • printf("array %x \n", hexvalue);

不起作用,因为%x期望unsigned int作为参数,hexvalue不是。相反,它产生undefined behaviour

参考:C11标准,§7.21.6.1

  

如果任何参数不是相应转换规范的正确类型,则行为未定义。

另外,请注意,main()的推荐签名为int main(void)

答案 1 :(得分:0)

printf("array %x \n", hexvalue);
此行不会按预期打印整个数组 它会打印阵列的地址
并且数组的地址是数组的第一个索引的地址

%x,%d否则是控制台屏幕上显示的数字类型
在这种情况下printf("array %x \n", hexvalue); 它将以十六进制类型打印数组的地址 如果要打印地址,请使用%p

答案 2 :(得分:0)

%x转换说明符将 unsigned int作为参数,并将输出格式化为十六进制字符串。它不期望指针值,也不会以%s转换说明符的相同方式遍历值数组。

您的循环是打印整个数组内容的唯一方法(尽管您应该将转换说明符%hhx用于类型unsigned char的值)。

答案 3 :(得分:-1)

hexvalue格式说明符将unsigned int作为输入,并以十六进制格式输出。它并没有像你想要的那样采用指向数组的指针。

因此,它应该打印的是十六进制指针的十六进制地址,因为它只是将指针视为无符号整数。