【问题标题】:problems understanding the size_t type and the sizeof operator理解 size_t 类型和 sizeof 运算符的问题
【发布时间】:2012-09-17 05:36:18
【问题描述】:
void sizeof_test2();

void sizeof_test2()
{
    int array[5];
    size_t arr_size = sizeof(array);

    printf( "sizeof:\n"
            "array = %d\n"
            "arr_size = %d\n", sizeof(array), sizeof(arr_size));
}

GCC 编译器输出:

sizeof_test2.c: In function `sizeof_test2':  
sizeof_test2.c:6: error: `size_t' undeclared (first use in this function)  
sizeof_test2.c:6: error: (Each undeclared identifier is<br>
reported only once sizeof_test2.c:6: error: for each function it<br>
appears in.) sizeof_test2.c:6: error: parse error before "arr_size"<br>
sizeof_test2.c:10: error: `arr_size' undeclared (first use in this<br>
function) make[2]:  [build/Debug/Cygwin-Windows/sizeof_test2.o]<br>
Error 1 make[1]:  [.build-conf] Error 2<br>  

不知道为什么会出现这个错误,通过printf 显示 size_t 类型的正确方法是什么?

【问题讨论】:

  • size_t 是在 stdlib.h 中定义的(我认为),因为您遇到了未声明的错误。
  • 添加了这个:#include 问题得到了解决.. 应该想到这一点,我确实通过 NetBeans 导航到标题但没有想到实际包含它..谢谢。
  • 就是这个。 stdlib.h 我想把它拉进去,因此我有点困惑。
  • 另外,您使用的printf 格式代码错误:stackoverflow.com/questions/4150056/printf-for-size-t
  • 可以使用 %d 格式代码(参见 Deitel - C: How to Program,第 6 版的第 271 页)

标签: c arrays printf sizeof size-t


【解决方案1】:

stdlib 是你想要的,为了显示它,我认为你正在寻找 %z 修饰符

#include <stdlib.h>

size_t arr_size;
printf("%zu\n", arr_size);  // unsigned decimal 
printf("%zx\n", arr_size);  // hex 

【讨论】:

  • @user38541 - 但请记住,仅 %d 或 %u 可能无法在 32 位和 64 位机器上正确编译。在 C99 中为此添加了 %z
【解决方案2】:

size_t 不是 C 中的内置类型。您必须包含 &lt;stddef.h&gt;&lt;stdlib.h&gt; 标准标头,其中定义了 size_t

【讨论】:

    【解决方案3】:

    size_t 类型在 stddef.h 标头(和其他标头,例如 stdio.h)中定义。

    请注意,在您的程序中,您使用的是 printf 函数,因此您必须包含 stdio.h

    【讨论】:

    • 是的,我刚刚将它包含在内。感谢并为我的新手错误感到抱歉。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-12
    • 1970-01-01
    • 2019-06-25
    • 1970-01-01
    • 2013-11-21
    • 2019-12-15
    相关资源
    最近更新 更多