Unable to understand casting in C
我有一个库函数,其签名如下:
1 2 3 4 5 6 7 | sgx_status_t sgx_unseal_data( const sgx_sealed_data_t * p_sealed_data, uint8_t * p_additional_MACtext, uint32_t * p_additional_MACtext_length, uint8_t * p_decrypted_text, uint32_t * p_decrypted_text_length ); |
现在,对于uint32_t * p_decrypted_text_length。
情况1:通过
1 2 3 4 5 6 7 8 9 | char resecret[50]; uint32_t resecret_len = sizeof(resecret); status = sgx_unseal_data( (sgx_sealed_data_t*)sealed_data, NULL, NULL, (uint8_t*)&resecret, (uint32_t*)&resecret_len); //Notice last parameter |
情况2:失败
1 2 3 4 5 6 7 8 | char resecret[50]; // uint32_t resecret_len = sizeof(resecret); status = sgx_unseal_data( (sgx_sealed_data_t*)sealed_data, NULL, NULL, (uint8_t*)&resecret, (uint32_t*)&(sizeof(resecret))); //Notice last parameter |
我的问题是为什么第二种情况失败了。 我在选角中缺少什么? 另外,如果您能进一步解释uint_8t,uint_32t,size_t及其指针表亲之间的转换。
可能发生的情况是
您将指针传递给变量,因此函数可以取消引用指针以进行赋值。
这个问题与转换完全无关,只是您无法获得右值的地址。