首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在c中接收数目可变的参数中的MAC地址?

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

Stack Overflow用户
提问于 2017-11-01 16:02:06
回答 1查看 118关注 0票数 0

由于我对c中可变数量的参数知之甚少,我找不到适合我的问题的解决方案。

简而言之,我的问题是我将在函数中接收mac地址,该函数接收可变数量的参数。我想获取mac地址并将其打印为以下格式x:x

我希望在字符串形式的mac地址的格式应该发生在接收可变数量的参数的函数。

到目前为止,我已经这样做了。

代码语言:javascript
运行
复制
#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);
}

打印时不打印任何内容。如何做到这一点?

EN

回答 1

Stack Overflow用户

发布于 2017-11-01 16:47:57

这将会起作用(试一下):

代码语言:javascript
运行
复制
unsigned char array[6] = "abc";

但是当你基本上这样做的时候:

代码语言:javascript
运行
复制
unsigned char array[6] = { 0x00, 0x0c, 0x2a, 0xab, 0x0f, 0x3c };
...
printf("%s", array);

您实际上打印的是大小为0的字符串。记住,字符串是NUL结尾的。

在这里使用可变数量的参数是没有意义的。你可能想要这个:

代码语言:javascript
运行
复制
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);
}

或者这样:

代码语言:javascript
运行
复制
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);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47050541

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档