如何在 utmp.h 中打印 utmp 结构的数据?
How do you print utmp struct's data in utmp.h?
我想学习使用utmp.h自带的函数和数据结构。
在下面的代码中,我想遍历 utmp 结构并打印它们的数据字段。
#include <stdio.h>
#include <utmp.h>
int main()
{
struct utmp *data;
data = getutent();
int i = 0 ;
while(data != NULL)
{
++i;
printf("%s\n" , data->ut_id);
data = getutent();
}
printf("%d" , i);
return 0 ;
}
即使 ut_id
是 char[4]
类型,当我 运行 代码时,我收到此警告:
警告:“__builtin_puts”参数 1 声明的属性“非字符串”[-Wstringop-overflow=]
我该如何解决?
此警告是 gcc 特定属性 __attribute_nonstring__
的结果,该属性用作字符数组不一定以 NUL
字符结尾的指示符,因此可能不会可以安全地与标准库字符串函数一起使用。 Linux 中的 utmp
结构在其字符数组字段上使用该属性定义。
要解决该警告,您可以使用 printf()
修饰符 %.*s
指定字符数组的固定宽度输出,如下所示:
printf("%.*s\n" , (int)(sizeof data->ut_id), data->ut_id);
(您可以只使用 4
作为第二个参数,但 sizeof
更灵活)。
我想学习使用utmp.h自带的函数和数据结构。 在下面的代码中,我想遍历 utmp 结构并打印它们的数据字段。
#include <stdio.h>
#include <utmp.h>
int main()
{
struct utmp *data;
data = getutent();
int i = 0 ;
while(data != NULL)
{
++i;
printf("%s\n" , data->ut_id);
data = getutent();
}
printf("%d" , i);
return 0 ;
}
即使 ut_id
是 char[4]
类型,当我 运行 代码时,我收到此警告:
警告:“__builtin_puts”参数 1 声明的属性“非字符串”[-Wstringop-overflow=]
我该如何解决?
此警告是 gcc 特定属性 __attribute_nonstring__
的结果,该属性用作字符数组不一定以 NUL
字符结尾的指示符,因此可能不会可以安全地与标准库字符串函数一起使用。 Linux 中的 utmp
结构在其字符数组字段上使用该属性定义。
要解决该警告,您可以使用 printf()
修饰符 %.*s
指定字符数组的固定宽度输出,如下所示:
printf("%.*s\n" , (int)(sizeof data->ut_id), data->ut_id);
(您可以只使用 4
作为第二个参数,但 sizeof
更灵活)。