我得到warning: format '%lu' expects argument of type 'long unsigned int', but argument 4 has type 'long unsigned int *' [-Wformat]
以下代码
unsigned long buf[254];
char systemlogmsg[500]= {'\0'};
snprintf(systemlogmsg, sizeof(systemlogmsg), "INFO: %lu ", buf);
我应该使用什么代替%lu
?
此外,我尝试使用
snprintf(systemlogmsg, sizeof(systemlogmsg), "INFO: %lu ", (unsigned long int *) buf);
但它没有帮助。我应该如何通过演员?
答案 0 :(得分:2)
我认为这里的问题是buf
是unsigned long
的数组,但是您传入的格式说明符需要单< / em> unsigned long
。您应该从要打印的数组中选择特定的unsigned long
,或者更改格式说明符以打印指针而不是unsigned long
。
希望这有帮助!
答案 1 :(得分:2)
buf
是一个由254 unsigned long
组成的数组,并在传递给函数时衰减为unsigned long *
。您必须决定要打印的数组元素并使用数组下标:
snprintf(systemlogmsg, sizeof(systemlogmsg), "INFO: %lu ", buf[0]);
例如。
编辑:如果要打印出所有254个数字,那么你需要在循环中调用该函数(显然,数组索引是循环变量)。
答案 2 :(得分:2)
unsigned long buf[254];
声明一个unsigned long数组。因此,就sprintf而言,buf
是一个指针。但是你试图格式化%lu
,它不需要指针,也许是数组的一个元素:
snprintf(systemlogmsg, sizeof(systemlogmsg), "INFO: %lu ", buf[0]); // ok
因此,如果你有254个无符号长,你需要决定打印哪一个。如果你想全部打印出来:
int s = 0, i;
for (i=0; i< 254; i++)
s+=snprintf(systemlogmsg+s,
sizeof(systemlogmsg)-s, "INFO: %lu ", buf[i]); // ok