C++ 表达式无效的空指针

C++ 表达式无效的空指针,c++,visual-c++,C++,Visual C++,我的程序有一些问题,我想做的是生成一个md5密码,然后将其保存到一个文本文件中,这部分对我不起作用,(“表达式无效空指针”),任何帮助都将不胜感激 C++ Visual Studio 2015 main.cpp 您的代码有两个问题: 第1期: outfile.open("C:\encrypted_pass.txt", ios::out); 如果我们假设您的操作系统是Windows,则应为: outfile.open("C:\\encrypted_pass.txt", ios::out); 此

我的程序有一些问题,我想做的是生成一个
md5
密码,然后将其保存到一个文本文件中,这部分对我不起作用,(“表达式无效空指针”),任何帮助都将不胜感激

C++ Visual Studio 2015 main.cpp
您的代码有两个问题:

第1期:

outfile.open("C:\encrypted_pass.txt", ios::out);
如果我们假设您的操作系统是Windows,则应为:

outfile.open("C:\\encrypted_pass.txt", ios::out);
此外,正斜杠可用于标准流函数:

outfile.open("C:/encrypted_pass.txt", ios::out);

第二期:

outfile.open("C:\encrypted_pass.txt", ios::out);
对于本应返回
std::string
的函数,您将返回0

std::string CopyEncryptedPw(std::string pass)
{
    //...
    return 0;  // <-- This is bad
}

您还可以使用一个不返回任何内容的
void
函数,但您可能需要一个
int
返回值,例如,返回错误代码(或OK指示符)。

您的代码有两个问题:

第1期:

outfile.open("C:\encrypted_pass.txt", ios::out);
如果我们假设您的操作系统是Windows,则应为:

outfile.open("C:\\encrypted_pass.txt", ios::out);
此外,正斜杠可用于标准流函数:

outfile.open("C:/encrypted_pass.txt", ios::out);

第二期:

outfile.open("C:\encrypted_pass.txt", ios::out);
对于本应返回
std::string
的函数,您将返回0

std::string CopyEncryptedPw(std::string pass)
{
    //...
    return 0;  // <-- This is bad
}

您也可以有一个不返回任何内容的
void
函数,但您可能希望有一个
int
返回值,例如,返回一个错误代码(或OK指示符)。

程序在哪一行失败?很可能,
outfile.open()
调用失败。首先,
“C:\encrypted\u pass.txt”
应该是
“C:\\encrypted\u pass.txt”
(注意双反斜杠)。阅读有关你喜欢的C++教科书中的转义序列。并检查库调用是否失败。@IgorTandetnik或记住,正斜杠在Windows中也可用作目录分隔符。我拍摄了错误的屏幕截图@cdhowieI使用两个反斜杠尝试了该建议,结果相同@IgorTandetnikOn程序在哪一行失败?最有可能的是,
outfile.open()
调用失败。首先,
“C:\encrypted\u pass.txt”
应该是
“C:\\encrypted\u pass.txt”
(注意双反斜杠)。阅读有关你喜欢的C++教科书中的转义序列。并检查库调用是否失败。@IgorTandetnik或记住,正斜杠在Windows中也可用作目录分隔符。我拍摄了错误的屏幕截图@cdhowieI使用双反斜杠尝试了该建议,结果相同@IgorTandetnik0或任何整数???为什么会这样?问题是传递一个以null结尾的字符串的空指针。你是对的。将答案更改为显式状态0。为了澄清一点,从返回
std::string
的函数返回0将导致使用
std::string(char const*)
构造函数重载构造返回值,并将0作为参数传入。如果传入空指针,这个构造函数将被记录为调用未定义的行为,并且正如我们所知,0隐式地转换为任何指针类型作为空指针。tl;dr:
返回0
return std::string(nullptr)执行相同的操作,是UB.0还是任意整数???为什么会这样?问题是传递一个以null结尾的字符串的空指针。你是对的。将答案更改为显式状态0。为了澄清一点,从返回
std::string
的函数返回0将导致使用
std::string(char const*)
构造函数重载构造返回值,并将0作为参数传入。如果传入空指针,这个构造函数将被记录为调用未定义的行为,并且正如我们所知,0隐式地转换为任何指针类型作为空指针。tl;dr:
返回0
return std::string(nullptr)执行相同的操作,即UB。