C 返回字符串不正确

标签 c string char return

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

相关文章:

C:读取图像并将其存储在包含零的字符数组中

c - Intel Galileo 裸机 UART

python - 在 Python 中打开一个 .txt 文件

python - 找出: In how many word a character is present in a given Sentence: PYTHON

C缓冲区溢出

我可以像这样更改结构对象中的值吗?

c - 第一次尝试从套接字读取失败,然后工作正常

java - 使用 compareTo(String) 得到错误说 undefined for the type String

c++ - Char Star Array 参数未正确终止

c++ - int8_t 和 char : converts between pointers to integer types with different sign - but it doesn't