Я пытаюсь получить длину строки моего ключа для моей хэш-функции, и я продолжаю получать эту ошибку в GDB в том месте, где я пытаюсь использовать strlen:
"_strlen_sse2 () at ../sysdeps/x86_64/multiarch/../strlen.S:79
79 ../sysdeps/x86_64/multiarch/../strlen.S: No such file or directory."
Я пытался запустить gdb, мне не разрешено использовать строковый класс, я знаю, что моя программа не прошла эту строку кода.
int table::hashfunc(char key[])
{
int hash = 0;
int k = 1;
int key_size = strlen(key); //PROGRAM DOESN'T RUN PAST HERE
for(int i = 0; i < key_size; ++i)
{
hash = hash + (int)key[i];
hash = pow(hash, k);
}
int index = hash % SIZE;
return index;
}
//This is where I call the hash function from.
int table::add_name(char character[], char movie[], char choice)
{
int index = hashfunc(character);
Я ожидал, что key_size будет установлен на количество символов в ключе, но когда я проверяю strlen (ключ) в GDB, я получаю это:
(gdb) print strlen(key)
$1 = (size_t (*)(const char *)) 0x7ffff7156620 <__strlen_sse2>
вот где я читаю в клавише char:
do
{
cout << "Please enter the name of the film you
would like to add to: " <<endl;
cin.get(temp_movie, temp_size);
cin.ignore(100, '\n');
cout << "Enter 'C' to add a character,
enter 'A' to add an actor: " <<endl;
cin >> choice;
cin.ignore(100, '\n');
choice = toupper(choice);
cout << "Enter the name of the character or
actor you would like to add: " <<endl;
cin.get(temp_name, temp_size);
cin.ignore(100, '\n');
if(choice == 'C')
character_table.add_name(temp_name,
temp_movie, choice);
else if(choice == 'A')
actor_table.add_name(temp_name,
temp_movie, choice);
else
cout << "That is an invalid choice.
please try again." <<endl;
}while(choice != 'A' && choice != 'C');