在 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
为了加密密钥,我有一个 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