size_t 指针 vs uint32_t c 中的指针
size_t pointer vs uint32_t pointer in c
我在使用 size_t*
和 uint32_t*
时遇到问题
我有一个类似
的程序
int main ()
{
size_t out_length;
.
.
.
func_1(param_1, ..., &out_length);
out_length > some_numberl;
}
func_1(param_1, ... , size_t *length)
{
.
.
.
*length = 0;
.
.
*length = to_some_unsigned_number;
}
因为它在 main
中调用 func_1();
工作正常,但现在我必须在另一个看起来像这样的函数中调用 func_1();
func_2(param_1, ...,uint32_t* output_length)
{
}
所以程序现在看起来像这样
int main ()
{
size_t out_length;
.
.
.
func_2(param_1, ..., &out_length);
out_length > some_number;
}
func_2(param_1, ...,uint32_t* output_length)
{
func_1(param_1, ... ,output_length);
//stuff
}
func_1(param_1, ... , size_t *length)
{
.
.
.
*length = 0;
.
.
*length = to_some_unsigned_number;
}
所以我的问题是如何正确获取output_length
的值。我目前读到的是 0。
如果有人能指出正确的方向,我将不胜感激。
您不能将f1
返回的size_t
值直接存储到f2
参数指向的uint32_t
变量中,因为类型不同,并且尺寸也可以不同。相反,在 f2
中使用中间局部变量,这也提供了测试超出范围条件的机会。 f2
到 main
返回的 uint32_t
值也是如此,只是方向相反。
#include <stdlib.h>
#include <stdint.h>
void func_1(size_t* length)
{
*length = 42;
}
void func_2(uint32_t* output_length)
{
size_t length;
func_1(&length);
if(length > UINT32_MAX) exit(1); // out of range
*output_length = (uint32_t)length;
}
int main()
{
size_t out_length;
uint32_t f2_length;
func_2(&f2_length);
out_length = f2_length;
}
我在使用 size_t*
和 uint32_t*
我有一个类似
的程序int main ()
{
size_t out_length;
.
.
.
func_1(param_1, ..., &out_length);
out_length > some_numberl;
}
func_1(param_1, ... , size_t *length)
{
.
.
.
*length = 0;
.
.
*length = to_some_unsigned_number;
}
因为它在 main
中调用 func_1();
工作正常,但现在我必须在另一个看起来像这样的函数中调用 func_1();
func_2(param_1, ...,uint32_t* output_length)
{
}
所以程序现在看起来像这样
int main ()
{
size_t out_length;
.
.
.
func_2(param_1, ..., &out_length);
out_length > some_number;
}
func_2(param_1, ...,uint32_t* output_length)
{
func_1(param_1, ... ,output_length);
//stuff
}
func_1(param_1, ... , size_t *length)
{
.
.
.
*length = 0;
.
.
*length = to_some_unsigned_number;
}
所以我的问题是如何正确获取output_length
的值。我目前读到的是 0。
如果有人能指出正确的方向,我将不胜感激。
您不能将f1
返回的size_t
值直接存储到f2
参数指向的uint32_t
变量中,因为类型不同,并且尺寸也可以不同。相反,在 f2
中使用中间局部变量,这也提供了测试超出范围条件的机会。 f2
到 main
返回的 uint32_t
值也是如此,只是方向相反。
#include <stdlib.h>
#include <stdint.h>
void func_1(size_t* length)
{
*length = 42;
}
void func_2(uint32_t* output_length)
{
size_t length;
func_1(&length);
if(length > UINT32_MAX) exit(1); // out of range
*output_length = (uint32_t)length;
}
int main()
{
size_t out_length;
uint32_t f2_length;
func_2(&f2_length);
out_length = f2_length;
}