0

私はstackoverflowで同様の質問をしましたが、私の問題は解決しませんでした

以下のように文字列配列を送信しようとしています

void manipulateString( char *);
int hashTable (int &, char * );
const int HTsize = 10;
int main()
{
    const int size = 100;
    char inputString[size];

    cout << " Enter first names ( separate by a space ) \n ";
    cin.getline(inputString,size);

    manipulateString(inputString);

    return 0;
}

    void manipulateString (char *input)
{

    int firstNamelen;
    int hIndex=0,newIndex=0;
    int totalName = 0;

    char *firstname;
    firstname = strtok(input, " ");  // separate firstname

    while (firstname != NULL)
    {   

    firstNamelen = strlen(firstname);
    hIndex = hashfunction(firstname,firstNamelen);

    newIndex=hashTable(hIndex, firstname);
    cout << "\n\n ( " << firstname << " ) is stored at index [" << hIndex  << "] of hash table " << endl;

    firstname = strtok(NULL, " " ); // next first name

    }
}

に達するとvoid manipulateString (char *input)、セグメンテーション違反が発生します。どうした?

4

1 に答える 1

2

とがセグメンテーション違反につながっていないことを考えるとhashfunction...hashTable

size-1文字しか読めません。cin.fail()成功したかどうかを確認しますcin.getline。そうでない場合、文字列は終了しない可能性がありNULLます。文字列がNULL終了していない場合、strlenまたはstrtokセグメンテーション違反につながる可能性があります。

于 2013-08-22T12:10:25.263 に答える