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 中使用中间局部变量,这也提供了测试超出范围条件的机会。 f2main 返回的 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;
}