我想学习使用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]
,当我运行代码时,我得到以下警告:
- warning:'__builtin_puts' argument 1 declared attribute 'nonstring' [-Wstringop-overflow=]*
我该怎么解决?
1条答案
按热度按时间fjaof16o1#
此警告是gcc特定属性
__attribute_nonstring__
的结果,该属性用作指示符,表明字符数组不一定以NUL
字符结尾,因此与标准库字符串函数一起使用可能不安全。Linux中的utmp
结构体在其字符数组字段上定义了该属性。要解决这个警告,你可以使用
printf()
修饰符%.*s
来指定字符数组的固定宽度输出,如下所示:(you可以只使用
4
作为第二个参数,但sizeof
更灵活)。