Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c++;-“sprintf错误”;“变量可能不安全”;(C4996)。。。选择?_C++_Windows_Networking_Adapter_Bootp - Fatal编程技术网

C++ c++;-“sprintf错误”;“变量可能不安全”;(C4996)。。。选择?

C++ c++;-“sprintf错误”;“变量可能不安全”;(C4996)。。。选择?,c++,windows,networking,adapter,bootp,C++,Windows,Networking,Adapter,Bootp,这是我的密码: #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>

这是我的密码:

#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;
}
\define\u CRT\u SECURE\u NO\u警告
#杂注警告(禁用:4996)
#pragma注释(lib,“ws2_32.lib”)
#包括“stdafx.h”
#包括
#包括“Bootpd.h”
#包括
#包括
#包括
char*MAC(){
PIP_适配器_信息适配器信息;
DWORD dwBufLen=sizeof(适配器信息);
char*mac_addr=(char*)malloc(20);
AdapterInfo=(IP_适配器信息*)malloc(sizeof(IP_适配器信息));
断言(AdapterInfo!=NULL);//分配内存时出错
//对GetAdapterInfo进行初始调用,以在dwBufLen变量中获得必要的大小
if(getAdapterInfo(AdapterInfo,&dwBufLen)=错误\缓冲区\溢出){
适配器信息=(IP_适配器信息*)malloc(dwBufLen);
断言(AdapterInfo!=NULL);
}
if(getAdapterInfo(AdapterInfo和dwBufLen)=无错误){
PIP\u ADAPTER\u INFO=AdapterInfo;//复制信息
sprintf(mac_addr,“%02X:%02X:%02X:%02X:%02X:%02X:%02X”,
信息->地址[0],信息->地址[1],
信息->地址[2],信息->地址[3],
信息->地址[4],信息->地址[5];
}
免费(AdapterInfo);
返回mac_addr;
}

我在Windows 10上使用VS 2015。我正在尝试将网络适配器的MAC地址信息格式化为MAC地址(
aa:bb:cc:dd:ee:ff
)。我已尝试在我的
\include
语句上方定义
\CRT\u SECURE\u NO\u警告
并禁用警告
4996
,但没有成功。是否有我遗漏的任何东西,或者是否有人知道一种不同的解决方法来消除
sprintf
错误
变量可能不安全
?谢谢。

编译器正在抱怨mac\u addr数组可能溢出。给斯普林特一个机会

关闭警告可能是错误的选择。是什么引起了这些警告?这是一个在代码> %02x vs.任何<代码>地址[0 ] < /C++ >下的类型不匹配吗?“C499 6在编译器遇到一个被标记为未被删除的函数或变量时发生”。源代码:因为不包含完整的消息文本,所以很难对您有帮助。为什么不使用
std::string
和friends,而不是使用
malloc
进行所有这些丑陋的手动分配呢?有一些方法可以解决。另一方面,您正在错误地初始化
dwBufLen
。您将其设置为
sizeof(adapterfo)
,但
adapterfo
是指针,因此
dwBufLen
将为4或8,具体取决于32位或64位编译。但是,然后您使用
malloc()
分配
sizeof(IP\u ADAPTER\u INFO)
字节,并忽略
dwBufLen
。因此,您对
getAdapterInfo()
的第一次调用是关于真实缓冲区大小的,传入的缓冲区大小比实际缓冲区小得多。初始化<代码> DWBFFEN < /代码>作为<代码> SigeOf(* AdapterInfo)< /> >或<代码> sieOf(IPAdvultSyfIn)< /C> >,然后通过<代码> DWBFLUN < /CUL> >第一调用>代码> MARROCULE()/CUL>。<代码> AsStut.H./C>是C++中的一个弃用C兼容性头,使用<代码> CasSert < /代码>和朋友。您也不包括
sprintf
malloc
/
free
cstdio
cstdlib
所需的标题。您还必须使用C++代码头等效项从 STD< /COD>命名空间(例如,<代码> STD::SAMPFTF , STD::MALLC/ STD::Fabue<代码> >,以实现标准兼容,因为实现不需要将函数定义放入全局命名空间中。当C++编程时,应该使用<代码> NulLPTR < /C> >而不是<代码> null >代码>以更好的类型安全。