我附加了這個問題的代碼應該獲取設備的mac地址並將其打印出來。它將數據從結構ifreq複製到uint8_t數組時,它工作正常,但當我不這樣做時,會得到奇怪的結果。看看第二行,輸出的第二個字節。奇怪的printf()行爲
#include <stdio.h>
#include <string.h>
#include <sys/socket.h>
#include <net/if.h>
#include <sys/ioctl.h>
#include <net/ethernet.h>
#include <sys/types.h>
#include <stdint.h>
int main()
{
uint8_t tab[6];
int i;
struct ifreq one;
int sd = socket(AF_PACKET, SOCK_RAW, 0);
memset(&one, 0, sizeof(struct ifreq));
strcpy(one.ifr_name, "eth0");
int v = ioctl(sd, SIOCGIFHWADDR, &one);
memcpy(tab, one.ifr_hwaddr.sa_data, sizeof(uint8_t) * 6);
for(i=0;i<6;i++)
printf("%02x:", tab[i]);
printf("\n");
for(i=0;i<6;i++)
printf("%02x:", one.ifr_hwaddr.sa_data[i]);
printf("\n");
}
OUTPUT:
74:86:7A:0A:2C:6D:
74:ffffff86:7A:0A:2C:6D:
你的問題是什麼?你爲什麼期望別的嗎? ('printf'通過參數傳遞'...',如果你需要類型提升發生一些特定的方式,你必須指定。編譯器不能用魔法知道) –
的printf(「%02X:」 ......可以打印8個字符 – Taiki
@Taiki當然你會想到這個代碼做?'的printf(「%02X」,5000 );'甚至'的printf(「%02X」,-1);?' –