我在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
都是指针,那么当我尝试打印它们时它们都没有给出相同的输出?
答案 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作为输入,并以十六进制格式输出。它并没有像你想要的那样采用指向数组的指针。
因此,它应该打印的是十六进制指针的十六进制地址,因为它只是将指针视为无符号整数。