基于字符串的参数的分段错误

时间:2015-12-19 03:49:12

标签: c++ segmentation-fault

我正在尝试创建一个密码生成程序,该程序可以自动执行我用来生成密码的过程。 (灵感: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])时,它可以正常工作。虽然第一个字母表保持不变。所以我猜它与该函数/参数有关。

1 个答案:

答案 0 :(得分:0)

我设法让它运行起来。它仅在第一个参数具有奇数个字符时才有效(有点糟糕)。我正在修复替换字符的循环。