1

我目前正在编写系统编程作业,其中一部分我需要获取目录中文件的一些信息。

对于文件的统计信息,我们有ctime()time_t类型转换为string并返回指向它的指针的函数。

但是uid_toff_t类型呢?我通过互联网搜索并找不到任何功能..或者如果不存在任何功能,您能告诉我如何实现这样的功能吗?

4

5 回答 5

4

两者都被定义为算术类型(http://www.opengroup.org/onlinepubs/009695399/basedefs/sys/types.h.html),并且在实践中是正整数。因此,您可以只转换为 unsigned long long,并使用带有“%llu”的 sprintf 转换为字符串。

于 2009-04-28T10:22:48.520 回答
2

size_t并且off_t只是无符号整数类型。(编辑:off_t很长?看,教训是,检查你的标题!)

所以使用sprintf(或其他)使用“%i”格式说明符来转换它们。

编辑时:废话,您在我回答时更改size_t为。定义在; 看这里。(它也是一个无符号整数类型,但是一个.)uid_tuid_ttypes.hunsigned short

于 2009-04-28T10:15:11.000 回答
1

Linux 的snprintf()支持 type 值的 'z' 格式说明符size_t。不确定它的便携性,您需要仔细检查“符合”部分。

对于off_t,您可能需要转换为最大的无符号整数类型,即unsigned long并使用“lu”说明符。

于 2009-04-28T10:16:06.630 回答
0

off_t是一个long int:格式=“%ld”

size_t是一个unsigned int:格式=“%u”

您可以在函数中使用这些格式sprintf转换为 char*。

于 2009-04-28T10:15:41.017 回答
0

使用 gcc 5.4.0 以下行:

printf("user #%ld did this or that!\n", uid);

提出以下警告:

..main.c:133:9: warning: format ‘%ld’ expects argument of type ‘long int’, but argument 2 has type ‘uid_t {aka unsigned int}’ [-Wformat=]

我建议您也这样做并检查编译器的输出。=)

于 2017-06-22T08:07:00.303 回答