我已经在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;
}


这里strhexvalue都是指针,那么为什么当我尝试打印它们时它们都没有给出相同的输出?

最佳答案

就你而言


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/

10-12 05:29