C语言使用sizeof查看变量内存占用时printf格式报错如何解决
报错原因
- 缺少标准库头文件:调用
printf必须引入标准输入输出头文件,你当前代码没有添加#include <stdio.h>,编译器会按隐式声明规则处理printf,无法正确校验参数类型和数量,直接导致too many arguments for format报错。 - 类型不匹配:
sizeof运算符的返回值为size_t类型,这是一个平台相关的无符号整数类型,你当前的编译环境下该类型被实现为long long unsigned int,和%d对应的有符号int类型不匹配,触发第一个格式错误提示。 - 编译器对C99标准支持不全:CodeBlocks默认自带的老版本MinGW编译器不支持C99新增的
%zu格式化符,所以替换为%zu后会提示未知转换字符的错误。
解决方法
方案1:强制类型转换(全平台通用,最推荐)
你要打印的基础类型内存大小都远小于int的取值范围,直接将sizeof的返回值强制转换为int类型即可配合%d正常使用,修改后的完整代码如下:
#include <stdio.h> int main() { char ch; short a; int b; long c; float d; double e; ch = 'a'; a = 1; b = 2; c = 3; d = 1.5; e = 1.5; printf ("%d\n", (int)sizeof(char)); printf ("%d\n", (int)sizeof(short)); printf ("%d\n", (int)sizeof(int)); printf ("%d\n", (int)sizeof(long)); printf ("%d\n", (int)sizeof(float)); printf ("%d\n", (int)sizeof(double)); return 0; }
方案2:使用当前环境匹配的格式化符
根据报错提示,你当前环境的size_t对应long long unsigned int类型,可以使用%llu作为格式化符输出,同样需要先添加#include <stdio.h>头文件。该方案仅适配当前编译环境,更换环境可能再次出现不兼容问题,不推荐使用。
内容的提问来源于stack exchange,提问作者SteveSun
相关产品推荐
相关产品推荐

