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在此上下文中,code>与return std::string(nullptr)执行相同的操作代码>,是UB.0还是任意整数???为什么会这样?问题是传递一个以null结尾的字符串的空指针。你是对的。将答案更改为显式状态0。为了澄清一点,从返回std::string
的函数返回0将导致使用std::string(char const*)
构造函数重载构造返回值,并将0作为参数传入。如果传入空指针,这个构造函数将被记录为调用未定义的行为,并且正如我们所知,0隐式地转换为任何指针类型作为空指针。tl;dr:返回0在此上下文中,code>与return std::string(nullptr)执行相同的操作代码>,即UB。