C语言中字符数组char的输出

关于C语言中unsiged char plain[32]的输出问题

环境:Ubuntu 16.04.7 LTS vscode。
在使用openssl库的时候遇到这个问题,记录一下。

	unsigned char plain [32];
    memcpy(plain, "AES encrypt in openssl demo", 27);
    printf("plain: " );
    printf("%s\n", plain);
    memset(plain + 27, 0, 5);
    //需要将加密区块长度填充为16字节整数倍,此处使用zero-padding,即末尾全用0填充
    printf("plain with padding: " );
    printf("%s\n", plain);
    for(int i = 0; i < 32; i++)
    {
        printf("%02x ", plain[i]);
    }
    printf("\n" );
    printf("plain[27] to plain[31]: " );
    for(int i = 27; i < 32; i++)
    {
        printf("%02x ", plain[i]);
    }
    printf("\n" );

运行结果如下:

plain: AES encrypt in openssl demo��
plain with padding: AES encrypt in openssl demo
41 45 53 20 65 6e 63 72 79 70 74 20 69 6e 20 6f 70 65 6e 73 73 6c 20 64 65 6d 6f 00 00 00 00 00
plain[27] to plain[31]: 00 00 00 00 00

第一行输出

输出plain的话,就是按照字符串输出整个字符数组,因为只赋值了前面27位,前面正常输出,后面5位没有初始化,就是系统默认分配的一个乱码。

第二行输出

这个时候,为plain的后面5位填充了0x00,对应的ASII码是NULL空字符,所以输出的时候后面5位也没有乱码,是空的。

第三行输出

如果plain用for循环,按照每一个索引plain[i]这样去输出的话,输出的是ASII码,所以看到的就是一个ASII编码。

第四行输出

输出填充的最后5位,可以看到就是之前填充进去的0x00,NULL的ASII码。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值