小编Nic*_*s M的帖子

用于匹配C++字符串常量的正则表达式

我目前正在研究C++预处理器,我需要将字符串常量与超过0个字母匹配"hey I'm a string.我目前正在使用这个,\"([^\\\"]+|\\.)+\"但是我的一个测试用例失败了.

测试用例:

std::cout << "hello" << " world";
std::cout << "He said: \"bananas\"" << "...";
std::cout << "";
std::cout << "\x12\23\x34";
Run Code Online (Sandbox Code Playgroud)

预期产量:

std::cout << String("hello") << String(" world");
std::cout << String("He said: \"bananas\"") << String("...");
std::cout << "";
std::cout << String("\x12\23\x34");
Run Code Online (Sandbox Code Playgroud)

在第二个我反而得到

std::cout << String("He said: \")bananas\"String(" << ")...";
Run Code Online (Sandbox Code Playgroud)

短复制代码(使用AR.3的正则表达式):

std::string in_line = "std::cout << \"He said: \\\"bananas\\\"\" << \"...\";";
std::regex r("\"([^\"]+|\\.|(?<=\\\\)\")+\"");
in_line = std::regex_replace(in_line, r, "String($&)");
Run Code Online (Sandbox Code Playgroud)

c++ regex string c-preprocessor

6
推荐指数
2
解决办法
2202
查看次数

GetAdaptersInfo崩溃

我正在尝试为我的一个朋友做一些硬件生成,我注意到GetAdaptersInfo有点奇怪.根据MSDN, pOutBufLen应该指向一个保持值为sizeof(IP_ADAPTER_INFO)(640)的变量.但是当我使用该值时,它返回111(ERROR_BUFFER_OVERFLOW)并将outBufLen设置为2560.当调用outBufLen设置为2560的函数时,它只会崩溃.

最小再现代码:

#include <windows.h>
#include <Iphlpapi.h>

int main()
{
    IP_ADAPTER_INFO adapter_inf;
    unsigned long int outBufLen = sizeof(IP_ADAPTER_INFO);

    GetAdaptersInfo(nullptr, &outBufLen); // returning 111 (ERROR_BUFFER_OVERFLOW) and setting outBufLen to 2560
    GetAdaptersInfo(&adapter_inf, &outBufLen); // crash during this call

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

不知道这是否重要,但64位Windows 8在这里.

c++ crash winapi hwid

3
推荐指数
1
解决办法
553
查看次数

标签 统计

c++ ×2

c-preprocessor ×1

crash ×1

hwid ×1

regex ×1

string ×1

winapi ×1