如何在C语言中打印 'off_t'?

12 浏览
0 Comments

如何在C语言中打印 'off_t'?

可能重复:

如何打印像off_t和size_t这样的类型?

我正在使用fstat(stream, &fs)在C中获取文件大小,它返回类型为off_t

只是打印会产生警告:

format ‘%d’ expects type ‘int’, but argument has type ‘off_t’

有没有办法在没有编译器错误的情况下打印这个值?

0
0 Comments

在C语言中如何打印'off_t'?

在C语言中,偏移类型通常是长整型。需要将其强制转换后再进行打印。

实际类型off_t在sys/types.h中定义。可以查阅该文件了解其具体类型。

需要注意的是,这种方法不具有可移植性;在不同的系统上,off_t可能具有不同的类型。

POSIX定义off_t是有符号的,虽然将其转换为足够大的无符号类型不会造成任何损害,但需要确保读取输出的人知道这一点。

原文中想要表达的是“长整型”,而不是无符号类型。已经进行了修正,谢谢。

对于支持大文件的32位系统,off_t可能是long long而不仅仅是long。如你所说,对于非可移植的解决方案,可以检查sys/types.h并根据实际情况使用正确的格式。

0
0 Comments

在C语言中,如何打印'off_t'这个类型的数据?

对于这个问题的解决方法是使用%lld来打印'off_t'类型的数据。不需要进行任何类型转换,直接使用这个格式化字符串即可。

虽然这个方法可以解决问题,但是并不推荐使用。因为%lld是用于打印'long long int'类型数据的格式化字符串,而不能保证'off_t'类型就是这个类型。为了保险起见,应该进行类型转换,并使用正确的格式化字符串。

同意Matteo的评论,进行类型转换是解决这个问题的正确方法。

如果不进行类型转换,可能会导致后续参数的损坏。

0