Выражение ошибки должно иметь указатель на тип объекта

#c #c

#c #c

Вопрос:

 #include <stdio.h>
int length(char s)
{ int i;
    for(i=0;s[i]!='';i  )
    {}
    printf("%d",i);
}

int main()
{
    char s[100];
    scanf("%s",s);
    length(s);
    

}
 

Я пытаюсь написать простую программу, которая печатает количество символов в строке без использования strlen, но я получаю эти сообщения об ошибках, которые на данный момент выходят за рамки моего понимания.

Комментарии:

1. int length(char s) должно быть int length(char s[100]) , вы передаете массив, но собираете его в char

2. Если вы объявляете функцию для возврата int, вы должны вернуть int.

3. int length(char s) -> void length(char const* s)

Ответ №1:

 #include <stdio.h>
int length(char s[])
{ int i;
    for(i=0;s[i]!='';i  )
    {}
    printf("%d",i);
}

int main()
{
    char s[100];
    scanf("%s",s);
    length(s);
    

}`
 

Нашел свою ошибку

Комментарии:

1. int length(char s[]) также является ошибкой. если вы не собираетесь возвращать значение, оно должно быть void length(char s[]) или void length(const char* s) .

2. Или добавьте a return i; , что также сделало бы его законным.

3. я обычно возвращаю 0 в конце

Ответ №2:

Поскольку вы инициализируете свою функцию как Integer , вы должны возвращать любой аргумент в функции length . Но также вы печатаете что-то вроде функции длины, тогда вы должны использовать функцию как void

 #include<stdio.h>

void length(char *s)
{
    int i;
    for(i=0;s[i]!='';i  ){}
    printf("%d",i);
}

int main()
{
    char s[100];
    scanf("%s",s);
    length(s);
    return 0;

}
 

Кроме того, вы передаете только массив символов и запускаете цикл для символа, поэтому он показывает исключение. Если вы хотите, чтобы ваша функция была целочисленной, передайте массив символов, например,

 #include<stdio.h>

int length(char *s)
{
    int i;
    for(i=0;s[i]!='';i  ){}
    printf("%d",i);
}

int main()
{
    char s[100];
    scanf("%s",s);
    length(s);
    return 0;

}