表达式无效的空指针

时间:2016-03-24 14:55:06

标签: c++ visual-c++

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

C ++ Visual Studio 2015

的main.cpp

#include <iostream>
#include <istream> 
#include <string> 
#include <sstream>
#include <fstream>
#include <iterator>
#include "s_encrypt.h"
#include "encrypt_copy.h"


using namespace std;




int main(int argc, char *argv[])
{
    string password = "";

    cout << "Please enter a password to be encrypted\n";
    getline(cin, password);


    cout << "MD5 Encryption of " << password << " " << "is this" << " " << md5(password);

    cout << "Saving MD5 generated password to text file";

    std::string p = md5(password);

    CopyEncryptedPw(p);

    return 0;

}

encrypt_copy.cpp

#include <istream>
#include <iostream>
#include <fstream>
#include <string>
#include "encrypt_copy.h"

using namespace std;

std::string CopyEncryptedPw(std::string pass)

{
    fstream outfile;

    outfile.open("C:\encrypted_pass.txt", ios::out);
    outfile << pass;
    return 0;
}

encrypt_copy.h

#pragma once
#ifndef ENCRYPT_H
#define ENCRYPT_H


std::string CopyEncryptedPw(std::string pass);

#endif 

enter image description here

1 个答案:

答案 0 :(得分:4)

您的代码存在两个问题:

问题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);

问题2:

对于应该返回std::string的函数,您返回0。

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

此代码在返回时表现出未定义的行为,因为会发生的情况是将0分配给std::string返回值,将0分配给std::string是未定义的行为。

返回字符串类型(或可转换为std::string的类型),或返回int

int CopyEncryptedPw(std::string pass)
{
    fstream outfile;
    outfile.open("C:\\encrypted_pass.txt", ios::out);
    outfile << pass;
    return 0;
}

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