tpa*_*r44 1 c struct pointers initialization
我是C的新手,对初始化结构有疑问.我正在使用一个我没有创建的结构,所以我不知道它里面是什么.因此,我没有初始化它,但编译器抱怨.所以我把它设置为NULL但是我遇到了分段错误.然后我查找了如何将所有内容设置为0并且它说将其设置为等于{0}.这也给了我一个分段错误.因为我知道我调用的函数是正确的,并且我传递的数组的大小正确,我几乎可以肯定它与我初始化结构的方式有关.初始化是
struct aes_ctx *aes_struct = {0}
Run Code Online (Sandbox Code Playgroud)
该函数的标题是
void aes_setkey(aes_ctx *aes, const void *key, u_int len);
Run Code Online (Sandbox Code Playgroud)
我称之为的方式是
aes_setkey(aes_struct, aes, CCA_STRENGTH);
Run Code Online (Sandbox Code Playgroud)
其中aes是大小为16的缓冲区,CCA_STRENGTH是16的常量int.
总结一下这个问题,我认为我初始化结构的方式导致它在以后无法使用.任何可以给我的帮助将非常感激!谢谢!
你不能用那种方式初始化一个指针(好吧,你可以,它只是没有指向任何有效的指针).这样的事情就是你所追求的:
struct aes_ctx aes_struct = {0};
Run Code Online (Sandbox Code Playgroud)
然后你可以将地址传递aes_struct给函数,但这取决于你是否需要动态分配这个东西(所需的范围和类型的大小将决定这一点).
所以...
struct aes_ctx aes_struct = {0};
aes_setkey(&aes_struct, aes, CCA_STRENGTH);
Run Code Online (Sandbox Code Playgroud)
要么
struct aes_ctx *aes_struct = malloc(sizeof(struct aes_ctx));
/* you may want to initialize the structure via memset or some init function */
aes_setkey(aes_struct, aes, CCA_STRENGTH);
Run Code Online (Sandbox Code Playgroud)