gpt4 book ai didi

C 返回字符串不正确

转载 作者:太空宇宙 更新时间:2023-11-04 07:20:50 25 4
gpt4 key购买 nike

我有一个简单的函数来获取 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/

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