Строковая функция в c программировании - PullRequest
1 голос
/ 12 апреля 2020
#include<stdio.h>
#include<string.h>

void printlength(char *s, char *t) {
    unsigned int c=0;
    int len = ((strlen(s) - strlen(t)) > c) ? strlen(s) : strlen(t);
    printf("%d\n", len);
}

void main() {
    char *x = "abc";
    char *y = "defgh";
    printlength(x,y);
}

strlen определен в string.h как возвращающий значение типа size_t, представляющее собой целое число без знака. Выход программы есть? O / P = 3 в ответе

Мое понимание: я знаю, что функция strlen вернет длину строки, исключая ноль, но я получил 5.

1 Ответ

2 голосов
/ 12 апреля 2020

Стандартная функция 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
...