如何在将NULL传递给std :: wstring时防止运行时崩溃?

Jon*_*ury 1 c++ string

我有这样的功能:

void Test(std::wstring test1)
{
   cout << test1.c_str();
}
Run Code Online (Sandbox Code Playgroud)

当我这样称呼时:

Test(NULL);
Run Code Online (Sandbox Code Playgroud)

我得到运行时异常,如"无效句柄",整个程序崩溃.我不能对参数'test1'进行空检查,因为编译器说它不能为空.我想首先阻止NULL传递,或者有办法在运行时检查NULL.我怎么解决这个问题?

Mar*_*k B 7

不幸的是,在这种情况下,您只需编写正确的代码:空指针可以隐式转换为wstring(通过C字符串构造函数),并且该构造函数要求C字符串指针为非null.

你必须调用之前进行空检查Test.你可以实现一个重载来帮助解决这个问题:

void Test(const wchar_t* test1)
{
    if(test1) Test(std::wstring(test1));
}
Run Code Online (Sandbox Code Playgroud)

请注意,这可能会隐藏问题,您可能希望在重载Test函数中断言和/或只是修复调用代码,因此它首先不会传入无效字符串.

  • 该死的,当一个人必须编写正确的代码时总是很不幸:D (3认同)