Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.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
winAPI GetAdapterAddresses不可打印的友好名称_Winapi - Fatal编程技术网

winAPI GetAdapterAddresses不可打印的友好名称

winAPI GetAdapterAddresses不可打印的友好名称,winapi,Winapi,() 为什么PIP_适配器_地址中的一些用户友好名称无法打印?(以及一些其他属性,如dns后缀) 不可打印的意思是包含不可打印的字符。对于exmaple,我测试的友好名称中的第一个字符的unicode值为8207(十进制) 一个最小完全可行的例子 #include <winsock2.h> #include <iphlpapi.h> #include <vector> #include <iostream> int main() { P

() 为什么PIP_适配器_地址中的一些用户友好名称无法打印?(以及一些其他属性,如dns后缀)

不可打印的意思是包含不可打印的字符。对于exmaple,我测试的友好名称中的第一个字符的unicode值为8207(十进制)

一个最小完全可行的例子

#include <winsock2.h>
#include <iphlpapi.h>
#include <vector>
#include <iostream>

int main()
{
    PIP_ADAPTER_ADDRESSES adapterAddresses;
    DWORD dwReqSize;
    DWORD retVal;
    DWORD count = 0;
    std::string tempForWstringConv;
    retVal = GetAdaptersAddresses(AF_INET, GAA_FLAG_INCLUDE_PREFIX, NULL, NULL, &dwReqSize);  // for knowing the required size

    if (retVal != ERROR_BUFFER_OVERFLOW) {
        return -1;
    }
    adapterAddresses = (PIP_ADAPTER_ADDRESSES)malloc(dwReqSize);
    retVal = GetAdaptersAddresses(AF_INET, GAA_FLAG_INCLUDE_PREFIX, NULL, adapterAddresses, &dwReqSize);  // this time actually getting the desired content
    if (retVal != ERROR_SUCCESS) {
        return -1;
    }
    for (PIP_ADAPTER_ADDRESSES adapter = adapterAddresses; adapter != NULL; adapter = adapter->Next)
    {
        //outLog.push_back(Adapter());
        printf("\tFriendly name: %ls\n", adapter->FriendlyName);
    }
    return 0;
}
#包括
#包括
#包括
#包括
int main()
{
PIP_适配器_地址适配器地址;
DWORD-dwReqSize;
德沃德·雷特瓦尔;
DWORD计数=0;
std::字符串tempForWstringConv;
retVal=getAdapterAddresses(AF_INET、GAA_FLAG_INCLUDE_PREFIX、NULL、NULL和dwReqSize);//用于了解所需的大小
if(retVal!=错误\u缓冲区\u溢出){
返回-1;
}
adapterAddresses=(PIP_适配器_地址)malloc(dwReqSize);
retVal=getAdapterAddresses(AF_INET,GAA_FLAG_INCLUDE_PREFIX,NULL,adapterAddresses,&dwReqSize);//这一次实际获取了所需的内容
if(retVal!=错误\u成功){
返回-1;
}
用于(PIP\U适配器\U地址适配器=适配器地址;适配器!=NULL;适配器=适配器->下一步)
{
//输出。推回(适配器());
printf(“\t友好名称:%ls\n”,适配器->友好名称);
}
返回0;
}

我终于找到了解决办法! 满足设置模式(\u文件号(标准输出),\u O\u 16文本); 问题是输出缓冲区不允许这些字符,因为模式不正确。唉,我们期望的产出是:


为了使用此功能,您必须:将cout的所有出现切换到wcou;B:将所有出现的printf切换到wprintf。C:包括和

如果你选择否决我的一个帖子,我想知道为什么,以便改进我提问的方式。我应该展示更多的研究吗?不是我。事实上,我投了更高的票。因为我认为你的问题是合理的,形式合理的。我确实稍微调整了一下你的近MCVE以使其完整。还调整了printf语句,但这不是问题的根源。找到了解决方案!现在就告诉我。因为当我运行您的代码时,我没有遇到任何问题。@sel:您通过将
printf
格式字符串从正确的更改为不正确的格式字符串,对问题进行了实质性的编辑。它正在使用Microsoft特定的扩展(
%S
)来扩展.Umm。。不。打印语句中有一半显示垃圾数据。你不能说那是什么,那是希伯来语。在一个文件上测试也是很好的一点,我应该提到的是,现在编辑(只是为一个文件制作一个像样的poc,应该需要几分钟)啊!一定是这样。是的,控制台是唯一不会自动默认处理unicode的东西。Windows中的任何其他文本控件都可以使用widechar缓冲区。如果您在visual studio调试器中检查字符串,它们无疑看起来是正确的。