我有一个简单的函数来获取 linux 机器上的 MAC 地址(假设 eth0 存在。我稍后会写更多)。
附带问题:是否有一个跨所有 Linux 发行版的通用界面?除了 lo?
C 函数:
char* getmac(){
FILE *mf;
mf = fopen("/sys/class/net/eth0/address", "r");
if(!mf) exit(-1);
char *mac;
fgets(mac, 18, mf);
printf("%2\n", mac);
return mac;
}
现在,这完美地打印出了 MAC。然而,当我返回它时,我得到了一个完全不同的值。
char *m;
m = getmac();
printf("%s\n", m);
产生一个完全不同的、几乎不可读的字符串。前 2 个字符总是正确的,之后就不可读了...
这就像一个魅力:
char* getmac(){
FILE *mf;
mf = fopen("/sys/class/net/eth0/address", "r");
if(!mf) exit(-1);
char *mac;
mac = calloc(18, sizeof(char));
if(!mac) exit(-1);
fgets(mac, 18, mf);
printf("%s\n", mac);
return mac;
}
感谢您的回答!!另外,以后免费。
最佳答案
char *mac;
fgets(mac, 18, mf);
你需要先给mac
分配内存,也许用malloc
。
正如 jia103 在评论中指出的那样,构建代码的一种方法可能是:
char* getmac(char *buf, size_t size);
然后调用者可以更自由地决定内容的存储方式(也许客户端对 malloc
并不那么感兴趣,更喜欢堆栈上的数组)。
关于C 返回字符串不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21741600/