我正在尝试创建一个密码生成程序,该程序可以自动执行我用来生成密码的过程。 (灵感:Password algorithm (by a Turing winner)
我正在使用CodeBlocks编写它。
但是,当我通过终端运行它(通过cd进入bin / Debug目录。)我得到:
Segmentation fault (core dumped)
从我到目前为止所读到的,似乎我正在尝试访问我无法访问的内存。我对指针很新,所以我不知道该怎么做。
我尝试添加一项检查,以确保我拥有所需数量的参数。但那仍然行不通。 这是代码:
#include <iostream>
#include <string>
using namespace std;
int reverseString (char *X);
void switchVal (char &X, char &Y);
int main(int argc, char **argv)
{
string name, service;
//Check if there are at least 2 arguments
if (argc < 3)
{
cerr << "usage: ./PasswordManager USERNAME SERVICE" << endl;
return 1;
}
//Assign arguments to appropriate variables
name = argv[1];
service = argv[2];
reverseString(&name[0]);
cout << name << endl;
}
int reverseString (char *X)
{
int i, size;
for (size=0; X[size]!='\0'; size++);
size -= 1;
for (i=0; i!=size; i++)
{
switchVal (X[i], X[size]);
size--;
}
return 0;
}
void switchVal (char &X, char &Y)
{
X = X + Y;
Y = X - Y;
X = X - Y;
}
更令人困惑的是,当我将主reverseString(&name[0])
中的参数更改为reverseString(&name[1])
时,它可以正常工作。虽然第一个字母表保持不变。所以我猜它与该函数/参数有关。
答案 0 :(得分:0)
我设法让它运行起来。它仅在第一个参数具有奇数个字符时才有效(有点糟糕)。我正在修复替换字符的循环。