在 C 中初始化一个零数组

Initialize an array of zeros in C

为了加密密钥,我有一个 unsigned char * 的声明:

unsigned char *key = (unsigned char *)"0123456789012345";

我想把它做成键全是0(不是ASCII字符‘0’)。


我对 C 有点生疏,所以我这样声明:

unsigned char *iv = (unsigned char *){0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};

哪个给我警告,我该如何正确执行此操作?

您必须为存储分配内存:

unsigned char iv [16];
memset (iv, 0, sizeof iv);

或者:

unsigned char *iv = calloc (16);  // allocates and initializes to NUL

我建议使用 memset() 命令。

memset(iv, 0, sizeof(*iv))

编辑:我的错误,不小心遗漏了 iv

你可以直接写

unsigned char iv[16] = { 0 };

至于这个声明

unsigned char *iv = (unsigned char *){0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};

尝试使用复合文字,然后它的有效记录看起来就像在演示程序中显示的那样

#include <stdio.h>

int main(void) 
{
    enum { N = 16 };
    unsigned char *iv = ( unsigned char[N] ){ 0 };

    for ( size_t i = 0; i < N; i++ ) printf( "%d ", iv[i] );
    putchar( '\n' );

    return 0;
}

它的输出

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0