Для начала эти переменные
char *str1 , *str2 ;
не инициализируются. Таким образом, программа уже имеет неопределенное поведение. Вам необходимо объявить символьные массивы, например,
enum { N = 20 };
char str1[N], str2[N];
Стандартная функция fgets
может добавить символ новой строки '\n'
к введенной строке, если в массиве символов достаточно места.
Вы должны удалить этого персонажа. Например,
fgets(str1, 20, stdin);
fgets(str2, 20, stdin);
str1[ strcspn( str1, "\n" ) ] = '\0';
str2[ strcspn( str2, "\n" ) ] = '\0';
Функция lencompare
должна быть объявлена и определена как
int lencompare( const char *str1, const char *str2 )
{
return strlen( str1 ) == strlen( str2 );
}
Функция compare
имеет неопределенное поведение, потому что в некоторых путях выполнения она ничего не возвращает.
Также он должен быть объявлен как
int compare( const char *str1, const char *str2 );
Внутри функции вы дважды вызываете функцию lencompare
:
if(lencompare(str1, str2)==1){
и
if(lencompare(str1, str2) == 0){
Программа может выглядеть следующим образом
#include <stdio.h>
#include <string.h>
int lencompare( const char *str1, const char *str2 )
{
return strlen( str1 ) == strlen( str2 );
}
int compare( const char *str1, const char *str2 )
{
int equal = lencompare( str1, str2 );
if ( equal )
{
while ( *str1 == *str2 && *str1 )
{
++str1;
++str2;
}
equal = *str1 == *str2;
}
return equal;
}
int main(void)
{
enum { N = 20 };
char str1[N], str2[N];
fgets( str1, sizeof( str1 ), stdin );
fgets( str2, sizeof( str2 ), stdin );
str1[ strcspn( str1, "\n" ) ] = '\0';
str2[ strcspn( str2, "\n" ) ] = '\0';
if ( compare( str1, str2 ) )
{
puts( "both length and content are same" );
}
return 0;
}
Ее вывод может выглядеть следующим образом:
Sridhar
Sridhar
both length and content are same
Обратите внимание, что вместо цикла while в функции compare
вы можете использоватьстандартная функция C strcmp
. В этом случае функция сравнения будет очень простой
int compare( const char *str1, const char *str2 )
{
return strcmp( str1, str2 ) == 0;
}
На самом деле нет необходимости предварительно сравнивать длины строк.