0
저는 C++을 매우 처음 사용했습니다.C++ crypt (3) segementation 오류가 발생했습니다.
파일을 열고 모든 행을 읽고, crypt(3)
알고리즘을 사용하여 해당 행을 해시 한 다음 출력 파일에 다시 쓰려고합니다.
그러나 crypt()
메서드를 사용할 때마다 세그먼트 오류가 발생합니다. 아무도 내가 뭘 잘못하고 있다고 말할 수 있습니까? 고맙습니다. 내가 코드를 컴파일하는 데 사용하고
명령 :
g++ hasher.cpp -o hasher -lcrypt
내 코드 :
는#include <iostream> // User I/O
#include <fstream> // File I/O
#include <vector> // String array
#include <cstdlib> // Exit method
#include <crypt.h> // Crypt(3)
// Input & Output file names
std::string input_file;
std::string output_file;
// Plaintext & Hashed passwords
std::vector<std::string> passwords;
// Read input and output files
void read_file_names()
{
std::cout << "Input: ";
std::getline(std::cin, input_file);
std::cout << "Output: ";
std::getline(std::cin, output_file);
}
// Load passwords from input file
void load_passwords()
{
// Line/Hash declarations
std::string line;
std::string hash;
// Declare files
std::ifstream f_input;
std::ifstream f_output;
// Open files
f_input.open(input_file.c_str());
// Check if file can be opened
if (!f_input) {
std::cout << "Failed to open " << input_file << " for reading." << std::endl;
std::exit(1);
}
// Read all lines from file
while(getline(f_input, line))
{
// This line causes a segmentation fault
// I have no idea why
hash = crypt(line.c_str(), "");
std::cout << "Hashed [" << hash << "] " << line << std::endl;
}
}
// Main entry point of the app
int main()
{
read_file_names();
load_passwords();
return 0;
}
디버거를 나타내는 줄은 무엇입니까? –
저는 C++을 처음 사용 했으므로 아직 디버거가 없지만 다음과 같은 결과가 나왔습니다 :'hash = crypt (line.c_str(), ");' – Paradoxis
'line.c_str() '토굴 (crypt) '에 대한 호출처럼 보입니까? 그것은 NULL이 아닌가요? 'crypt'를 호출하기 직전에'std :: cout << "줄을 추가해보십시오 :"<< line.c_str() << std :: endl; 또한 gcc를 사용하고 있다면 디버거를 가지고 있습니다 - gdb (http://www.cs.cmu.edu/%7Egilpin/tutorial/)라고 부릅니다. –