Search code examples
c++c-strings

Modifying string literals for recursive function


I've got a recursive function that is supposed to check if a given word is a palindrome, which works by comparing the first and last value, then strips them off and passes them recursively into checkPalindrome, but whenever I try to assign word[size-1] to '\0', I get a Bus Error.

Here is my code:

bool checkPalindrome(char word[]){
  int size = std::strlen(word);
  //Parts removed...
  word[size-1]='\0'; //This is the line causing the issue
  return checkPalindrome(word+1);
  }
}

Here is an example of a call to this function:

checkPalindrome("racecar");

Thank you!


Solution

  • So as stated in the comments you can't modify a string literal. So before passing it to the function, make a copy of it.

    std::size_t len = std::strlen(word);
    char* copy = new char[len + 1];
    std::strncpy ( copy, word, len + 1 );
    isPalindromeR(copy);
    delete[] copy;
    

    other solution would be to not use recursion, thus not needing to modify the string.

    anyway outside of assignments use a std::string