我在最后一行得到一个“int格式,不同类型arg(arg 4)”错误。我应该只投射到int还是有更好的方法来处理这个?Cast off_t到int
struct stat info;
if (stat(file_path, &info) == -1 || errno == ENOENT)
return -1;
if (stat(file_path, &info) != -1)
{
char buf[LINELEN];
snprintf(buf,LINELEN,"File Size: %d",info.st_size);
关于'printf'(这让我真的很难过)的坏处恰恰就是格式字符串的问题。想象你的代码根据某种配置typedefs为'uint32_t'或'uint64_t'的类型。你永远不能只是printf这些变量。但是,绝大多数工作没有问题的解决方案是将参数转换为它们可以承担的最大大小。以你的情况为例:'printf(“%lu”,(unsigned int)info.st_size);'无论大小如何,都能正确打印。唯一的问题是,如果论点比你的演员大。你会失去数据,但仍然避免UB。 – Shahbaz