Стандартная функция C strlen
имеет тип возврата size_t
. Это целочисленный тип без знака.
Таким образом, разница, подобная этой strlen(s) - strlen(t)
, всегда больше или равна 0
.
В результате ваша исходная функция выведет 3
, потому что разница strlen(s) - strlen(t)
приведет к большому положительному числу.
Если вы собираетесь вывести максимальную длину двух строк, то функция может выглядеть следующим образом
void printlength( const char *s, const char *t )
{
size_t n1 = strlen( s );
size_t n2 = strlen( t );
size_t len = n1 < n2 ? n2 : n1;
printf( "%zu\n", len );
}
Если вы хотите для вывода минимальной длины двух строк, тогда функция будет выглядеть следующим образом:
void printlength( const char *s, const char *t )
{
size_t n1 = strlen( s );
size_t n2 = strlen( t );
size_t len = n2 < n1 ? n2 : n1;
printf( "%zu\n", len );
}
Таким образом, максимальная длина, возвращаемая первой функцией, будет равна 5, тогда как минимальная длина, возвращаемая второй функцией, будет равна 3.
Вот демонстрационная программа.
#include <stdio.h>
#include <string.h>
void printlength1( const char *s, const char *t )
{
size_t n1 = strlen( s );
size_t n2 = strlen( t );
size_t len = n1 < n2 ? n2 : n1;
printf( "%zu\n", len );
}
void printlength2( const char *s, const char *t )
{
size_t n1 = strlen( s );
size_t n2 = strlen( t );
size_t len = n2 < n1 ? n2 : n1;
printf( "%zu\n", len );
}
int main(void)
{
const char *s = "abc";
const char *t = "defgh";
printlength1( s, t );
printlength2( s, t );
return 0;
}
Ее вывод
5
3