C语言 如何在utmp.h中打印utmp结构体的数据?

hkmswyz6  于 2023-04-19  发布在  其他
关注(0)|答案(1)|浏览(142)

我想学习使用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=]*

我该怎么解决?

fjaof16o

fjaof16o1#

此警告是gcc特定属性__attribute_nonstring__的结果,该属性用作指示符,表明字符数组不一定以NUL字符结尾,因此与标准库字符串函数一起使用可能不安全。Linux中的utmp结构体在其字符数组字段上定义了该属性。
要解决这个警告,你可以使用printf()修饰符%.*s来指定字符数组的固定宽度输出,如下所示:

printf("%.*s\n" , (int)(sizeof data->ut_id), data->ut_id);

(you可以只使用4作为第二个参数,但sizeof更灵活)。

相关问题