gpt4 book ai didi

c - 如何在c中接收可变数量参数中的MAC地址?

转载 作者:行者123 更新时间:2023-11-30 16:39:28 26 4
gpt4 key购买 nike

由于我对 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);
}

关于c - 如何在c中接收可变数量参数中的MAC地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47050541/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com