Ошибка: конфликтующие типы для 'strlen' - PullRequest
0 голосов
/ 16 апреля 2011

У меня есть программа, но я получаю сообщение об ошибке. Пожалуйста, помогите мне в этом.

#include <stdio.h>
#include <string.h>
int print_strlen(char s[]);

main()
{
    char s[20];
    printf("Enter the string:\n");
    scanf("%s\n", s);
}

int print_strlen(char s[])
{
    int l;
    l = strlen(s);
    printf("Length of the string is: %s\n", l);
}

Ответы [ 6 ]

5 голосов
/ 16 апреля 2011

Не пытайтесь создать прототип strlen самостоятельно. Просто включите <string.h> и используйте уже имеющийся прототип (и функцию). Не пытайтесь написать собственную функцию с тем же именем (или, по крайней мере, официально, любым другим именем, начинающимся с str).

Конфликтующий тип, который он видит сейчас, заключается в том, что стандарт требует strlen для возврата size_t, а не int.

Также обратите внимание, что функция, которую вы назвали strlen прямо сейчас, бесконечно рекурсивна - когда она (очевидно) пытается вызвать стандарт strlen, она в конечном итоге вызовет сама себя, и, поскольку она делает это безоговорочно, он будет повторяться вечно (или пока система не убьет его из-за переполнения стека).

1 голос
/ 16 апреля 2011

strlen уже определен в string.h, следовательно, ошибка. Измените имя вашей функции на другое.

0 голосов
/ 16 апреля 2011

strlen - это функция, предоставляемая вам в string.h зачем заново изобретать колесо?

#include <stdio.h>
#include <string.h>
main()
{
        char s[20];
        printf("Enter the string:\n");
        scanf("%s\n",s);
        printf("Length of the string is: %s\n",strlen(s));
}

будет работать отлично.

0 голосов
/ 16 апреля 2011

Каково ваше сообщение об ошибке?

Вы не должны называть свою функцию strlen; уже есть функция strlen, и вы знаете, что она не будет работать, потому что вы используете реальную функцию strlen в своей функции strlen. Назовите это как-нибудь еще, например print_strlen. Кроме того, используйте void вместо int, если вы на самом деле ничего не возвращаете из print_strlen.

Другие проблемы, не связанные напрямую, включают очевидное переполнение буфера; Что делать, если вы ввели текст длиной более 20 байт?

0 голосов
/ 16 апреля 2011

strlen - это стандартная функция, объявленная в <string.h>, и вы пытаетесь определить ее с помощью другого прототипа (стандартная функция принимает char const*, а не char*).

0 голосов
/ 16 апреля 2011

Вызовите свою функцию как-нибудь еще, уже объявлено strlen() в string.h.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...