I had to write a program in c as a homework assignment. The program checks if the inputed string is a palindrome. Unfortunately I am getting a segmentation fault error when executing my program.
According to my knowledge segmentation fault means I am accessing memory that does not belong to me.
After some trying I found out, that I get that error "during" the marked scanf function. Please help.
This is the source-code:
#include <stdio.h>
#include <ctype.h>
#define FALSE 0
#define TRUE !FALSE
#define STR_LEN01 1000
unsigned long long fStrLen(unsigned char str[])
{
unsigned long long strLEN = 0;
for (unsigned short i = 0; str[i++]; strLEN++) {}
return strLEN;
}
unsigned short fStrComp(unsigned char str01[], unsigned char str02[])
{
for (unsigned short i = 0; /* EMPTY */ ; i++)
{
if ( str01[i] == 0 && str02[i] == 0 )
{ return 0; }
else if ( str01[i] != str02[i] && str02[i] == 0 )
{ return 1; }
else if ( str01[i] != str02[i] && str01[i] == 0 )
{ return 2; }
else if ( str01[i] != str02[i] && str02[i] != 0 && str01[i] != 0)
{ return 3; }
}
}
// ret 0 = strings are equal
// ret 1 = string 1 is longer
// ret 2 = string 2 is longer
// ret 3 = strings are not equal
void fStrRev(unsigned char str[])
{
unsigned short len = fStrLen(str);
unsigned char helpi, helpj;
for (unsigned short i = len-1, j = 0; i >= 0; i--, j++)
{
helpi = str[i];
helpj = str[j];
str[i] = helpj;
str[j] = helpi;
}
} // ATTENTION! Inputted string will be reversed!
unsigned short fPalindrome(unsigned char str[]) // TODO
{
unsigned char rev[STR_LEN01];
for (unsigned short i = 0; str[i]; i++)
{
rev[i] = str[i];
}
fStrRev(str);
return fStrComp(str, rev);
}
// ret 0 = palindrome
// *ret 1 = string 1 is longer*
// *ret 2 = string 2 is longer*
// ret 3 = strings are not equal, so no palindrome
int main(void)
{
unsigned short ret = 0;
unsigned char strIN01[STR_LEN01], strREV01[STR_LEN01], exit[] = "end";
while(TRUE)
{
printf("\n\n"
"Your word: ");
scanf(" %s", strIN01); ***// MARKED SCANF***
for (unsigned short i = 0; strIN01[i]; i++)
{ putchar( tolower( strIN01[i] ) ); }
if(fStrComp(strIN01, exit) == 0) { return 0; }
for (unsigned int i = 0; strIN01[i]; i++)
{
strREV01[i] = strIN01[i];
}
strREV01[ fStrLen(strIN01) ] = 0;
fStrRev(strREV01);
printf("word reversed: %s", strREV01);
ret = fPalindrome(strIN01);
if(ret == 0)
{
printf("Hurray! We have a palindrome :)\r\n");
}
else if(ret == 3)
{
printf("Unfortunately, your word is no palindrome :(\r\n");
}
}
return 0;
}
This is the Shell error:
└─$ gcc -Wall palindrom.c -o pal -lm
└─$ ./pal
Your word: hello
zsh: segmentation fault ./pal
└─$
Thank you for your help in advance.
Yours Faithfully, Tiger
PS The functions were tested by me separately while programming and should work