windows — ошибка sprintf «переменная может быть небезопасной» (C4996) … альтернативы?

Вот мой код:

#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable : 4996)
#pragma comment(lib,"ws2_32.lib")
#include "stdafx.h"#include <assert.h>
#include "Bootpd.h"#include <iostream>
#include <string>
#include <iphlpapi.h>char *MAC() {
PIP_ADAPTER_INFO AdapterInfo;
DWORD dwBufLen = sizeof(AdapterInfo);
char *mac_addr = (char*)malloc(20);

AdapterInfo = (IP_ADAPTER_INFO *)malloc(sizeof(IP_ADAPTER_INFO));
assert(AdapterInfo != NULL); //Error allocating memory

// Make an initial call to GetAdaptersInfo to get the necessary size into the dwBufLen variable
if (GetAdaptersInfo(AdapterInfo, &dwBufLen) == ERROR_BUFFER_OVERFLOW) {
AdapterInfo = (IP_ADAPTER_INFO *)malloc(dwBufLen);
assert(AdapterInfo != NULL);
}

if (GetAdaptersInfo(AdapterInfo, &dwBufLen) == NO_ERROR) {
PIP_ADAPTER_INFO info = AdapterInfo; //Copy information
sprintf(mac_addr, "%02X:%02X:%02X:%02X:%02X:%02X",
info->Address[0], info->Address[1],
info->Address[2], info->Address[3],
info->Address[4], info->Address[5]);
}
free(AdapterInfo);
return mac_addr;
}

Я использую VS 2015 на Windows 10. Я пытаюсь отформатировать информацию о MAC-адресе моего сетевого адаптера, чтобы она выглядела как MAC-адрес (aa:bb:cc:dd:ee:ff). Я уже пытался определить _CRT_SECURE_NO_WARNINGS и отключение предупреждения 4996 выше моего #include заявления без успеха. Есть ли что-то, что мне не хватает, или кто-нибудь знает другую работу, чтобы избавиться от sprintf ошибка variable may be unsafe? Благодарю.

0

Решение

Компилятор жалуется на возможность переполнения массива mac_addr. Дайте sprintf_s шанс. https://en.cppreference.com/w/c/io/fprintf

1

Другие решения

Других решений пока нет …