使用%llu格式符输出size_t类型时出现编译警告的问题求助
解决size_t输出的格式警告问题
你的问题出在对size_t类型的格式符使用错误上——size_t是实现定义的无符号整数类型,它不一定等于long long unsigned int,不同平台可能是unsigned int或unsigned long,直接用%llu会导致格式符和参数类型不匹配,触发编译器警告。
正确的解决方法
C99及以后的标准专门为size_t提供了专用格式符%zu,直接用它输出就不会有警告:
printf("\nThe length of your array is: %zu", capacity);
兼容老编译器的备选方案
如果你的编译器版本过老不支持%zu,可以把capacity强制转换为unsigned long类型,再用%lu输出:
printf("\nThe length of your array is: %lu", (unsigned long)capacity);
关于警告的说明
你看到的两个警告本质都是格式符与参数类型不匹配导致的:
- 第一个警告是编译器无法识别
%llu和size_t的对应关系; - 第二个警告是类型不匹配引发的格式解析错误,被编译器误判为参数过多。
内容的提问来源于stack exchange,提问作者Kryspin
相关产品推荐
相关产品推荐

