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 回答