由于我对c中可变数量的参数不太了解,因此找不到适合我问题的解决方案。
简而言之,我的问题是我将在函数中接收mac地址,该函数接收可变数量的参数。我想获取mac地址并以以下格式打印
x:x:x:x:x:x
我希望以字符串形式格式化mac地址应该在接收可变数量参数的函数中进行。
到目前为止,我已经做到了
#include <stdio.h>
#include <stdarg.h>
void fun(int,...);
void main()
{
unsigned char array[6] = {0x00, 0x0c, 0x2a, 0xab, 0x0f, 0x3c};
fun(10,array);
}
void fun(int x,...)
{
unsigned char *k=NULL;
char mac[18];
va_list list;
va_start(list,x);
k=va_arg(list,unsigned char *);
snprintf(mac,18,"Mac %s",k);
printf("Final mac is %s\n",mac);
va_end(list);
}
打印时不打印任何内容。如何实现呢?
最佳答案
这将起作用(尝试):
unsigned char array[6] = "abc";
但正如您基本上这样做:
unsigned char array[6] = { 0x00, 0x0c, 0x2a, 0xab, 0x0f, 0x3c };
...
printf("%s", array);
您实际上正在打印大小为0的字符串。请记住,字符串以NUL终止。
在这里使用可变数量的参数是没有意义的。
您可能想要这样:
void fun(int x, unsigned char array[])
{
char mac[28];
snprintf(mac, sizeof(mac), "Mac %02x %02x %02x %02x %02x %02x", array[0], array[1], array[2], array[3], array[4], array[5]);
printf("Final mac is %s\n", mac);
}
或这个:
void fun(int x, unsigned char array[])
{
char mac[28];
char hex[4];
snprintf(mac, sizeof(mac), "Mac");
for (int i = 0; i < 6 ; i++)
{
sprintf(hex, " %02x", array[i]);
strcat(mac, hex);
}
printf("Final mac is %s\n", mac);
}