我有以下的代碼,得到一個接口的MAC地址:這個代碼可以通過返回一個指向struct的指針來改進嗎?
static struct ifreq get_mac(int socket_desc, char *if_name) {
struct ifreq if_mac;
memset(&if_mac, 0, sizeof(struct ifreq));
strncpy(if_mac.ifr_name, if_name, IFNAMSIZ - 1);
...
return if_mac;
}
我的C經驗僅限於我在大學一樣。我粗略地指出,但我明白,按值返回大struct
是一個壞主意,因爲你可能會用完堆棧空間(stackoverflow!)。我如何更改上面的代碼來返回指向if_mac
的指針?這只是有點令人困惑,因爲有一個struct
和'地址'運算符:S。
您可以使用'malloc()'在堆上分配結構,然後返回一個指向它的指針。是否更好w.r.t性能只能通過分析兩個實現來確定。 –
我同意Als的回答。當不再使用if_mac時,不要忘記釋放內存。 – MYMNeo
或者你可以讓調用者分配一個(它已經有一個)並在一個額外的元素中傳遞一個指向該函數的指針:'void get_mac(ifreq * ptr,int socket_desc,char * if_name)' – wildplasser