0

我得到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);

但它没有帮助。我应该如何通过演员阵容?

4

3 回答 3

2
unsigned long  buf[254];

声明一个无符号长数组。buf就 sprintf 而言,指针也是如此。但是您正在尝试格式化%lu,它不需要指针,可能是数组的元素:

snprintf(systemlogmsg, sizeof(systemlogmsg), "INFO: %lu ",  buf[0]);  // ok

所以,如果你有 254 个 unsigned long,你需要决定打印哪一个。如果要全部打印:

int s = 0, i;
for (i=0; i< 254; i++)
  s+=snprintf(systemlogmsg+s, 
       sizeof(systemlogmsg)-s, "INFO: %lu ",  buf[i]);  // ok
于 2013-06-08T21:10:20.473 回答
2

我认为这里的问题是这buf是一个s数组unsigned long但是您传入的格式说明符需要一个 unsigned long. 您应该选择unsigned long要打印的特定数组,或者更改格式说明符以打印出指针而不是unsigned long.

希望这可以帮助!

于 2013-06-08T21:07:35.067 回答
2

buf是一个 254 s 的数组,并在传递给函数时unsigned long衰减为。unsigned long *您必须决定要打印数组的哪个元素并使用数组下标:

snprintf(systemlogmsg, sizeof(systemlogmsg), "INFO: %lu ",  buf[0]);

例如。

编辑:如果要打印出所有 254 个数字,则需要在循环中调用该函数(显然,数组索引是循环变量)。

于 2013-06-08T21:07:56.663 回答