sprintf一个unsigned char数组

时间:2018-04-09 09:09:11

标签: c printf

我需要将IP地址读入char数组,以便稍后处理。由于IP八位字节可以大到256,我认为使用unsigned char数组来读取它们会很好。这就是我打算如何使用它。

sprintf(buf,"%d.%d.%d.%d",ip24,ip16,ip8,ip);

但似乎sprintf的第一个参数应该是char *,因此它会抛出以下警告。我该如何处理呢。

expected ‘char * restrict’ but argument is of type ‘unsigned char *’

3 个答案:

答案 0 :(得分:2)

sprintf((char*)buf,"%d.%d.%d.%d",ip24,ip16,ip8,ip);

这可以避免警告。但为什么不使用char * buf?

答案 1 :(得分:2)

buf的类型首先应为char*。 IP八位字节可以大到256(即它是无符号字符)这一事实与bufunsigned char的数组无关。

sprint想要char*作为第一个参数,所以给它一个char:

Live Demonstration

答案 2 :(得分:1)

如果更改buf的数据类型,您需要将char*声明为char buf[16]unsigned char*而不是buf,或在使用时将其投弃使用很麻烦。

正如您所说的那样,参考sprintf()的手册页,它表明它期望char *str类型的第一个参数。