打印unsigned char*类型变量时,应使用哪种格式说明符?
问题解决:printf格式警告与打印文件名的正确方式
你的代码存在两个关键问题,导致格式警告且无法实现打印文件名的需求:
- 你传入printf的是
stbi_load返回的图像数据指针data,而非文件名字符串,完全偏离了打印文件名的目标; - 就算要打印指针地址,用
%u(无符号整数格式符)也不对,指针类型需要对应专门的格式符。
正确打印文件名的代码
如果要打印加载的文件名,直接传入文件名字符串,用%s(字符串格式符)即可:
const char* filename = "textures/height.png"; unsigned char* data = stbi_load(filename, &width, &height, &nr_components, 0); // 建议加上加载成功的判断 if (data) { printf("Loaded file: %s\n", filename); }
如果要打印指针地址(解决格式警告)
如果你的真实需求是打印data指针的内存地址,需要用%p格式符,并且按照C标准要求将指针转换为void*类型:
printf("Data pointer address: %p\n", (void*)data);
格式警告的原因
%u用于输出无符号整数,而data是unsigned char*类型的指针,类型不匹配,编译器会检测到这个错误并抛出格式警告。%p是C标准中专门用于输出指针地址的格式符,搭配void*转换可以彻底解决警告。
内容的提问来源于stack exchange,提问作者Chillzy
相关产品推荐
相关产品推荐

