我应该在这里使用什么格式说明符?

What format specifier should I use here?

提问人:Chillzy 提问时间:1/31/2023 最后编辑:Chillzy 更新时间:1/31/2023 访问量:91

问:

在这里得到这个代码来打印打开的文件的名称(如果你想知道的话,这是一个高度图),每次我尝试打印出来时,我都会收到格式警告,我应该使用哪种格式说明符?

    unsigned char* data = stbi_load("textures/height.png", &width, &height, &nr_components, 0);
    printf("Loaded file: %u\n", data);
C 文件 类型 char format-specifiers

评论

0赞 Chillzy 1/31/2023
需要明确的是,我只是要求格式说明符
0赞 JohnFilleau 1/31/2023
是否需要 或 的格式说明符?unsigned charunsigned char*
0赞 ChrisBD 1/31/2023
data被定义为指向一个指针,据推测,它保存了unsigned charunsigned char
3赞 Raymond Chen 1/31/2023
stbi_load不返回字符串。它返回位图数据。你不能像字符串一样打印它。文件的名称大概是 。textures/height.png
1赞 ikegami 1/31/2023
回复“不是错误,但仍然”,不,绝对是错误,即使您的编译器继续。

答:

11赞 Yakov Galka 1/31/2023 #1

如果您的目标是打印加载数据的地址,那就是:%p

printf("Loaded file: %p\n", (void*)data);

如果要逐字节打印实际数据,则应遍历字节并使用(十进制)或(十六进制):%hhu%hhx

printf("Loaded file:\n");
for(int i = 0; i < width*height*nr_components; ++i)
    printf("%hhx ", data[i]);
printf("\n");

data不包含文件的名称,因此,如果您只想打印名称,请打印您传递给的相同字符串:stbi_load

const char *filename = "textures/height.png";
unsigned char* data = stbi_load(filename, &width, &height, &nr_components, 0);
printf("Loaded file: %s\n", filename);

评论

0赞 chux - Reinstate Monica 1/31/2023
次要:为了更好地处理大文件,请使用:size_tsize_t n = (size_t)width*height*nr_components; for(size_t i = 0; i <n; ++i)