2017-02-23 9 views
0

У меня возникла проблема с обращением строки с помощью функции. Вот мой код:ошибка - индексированное значение не является ни массивом, ни указателем, ни вектором

#include<stdio.h> 

int str_length(char lang); 

int main() 
{ 
    char language[100]; 

    int string_length; 

    while(1==scanf("%[^\n]", language)) 
    { 
     string_length=str_length(language); 
    } 

    int i; 

    for(i=string_length; i>=0; i--) 
    { 
     printf("%c\n", language[i]); 
    } 

    return 0; 
} 

int str_length(char lang) 
{ 
    int i; 

    for(i=0; lang[i]!='\0'; i++) 
    { 
     i++; 
    } 

    return i; 
} 

ошибка, которая является такой же, как название показывает в строке 'для (я = 0; языки [я]! =' \ 0 '; я ++).

Пожалуйста, помогите мне разобраться в проблеме.

+0

'language' объявлен как массив символов, но прототип/подпись для' str_length() 'говорит, что ожидает один символ. Возможно, вы имели в виду: 'str_length (char * lang);' <- отметить добавление '*' – user3629249

+0

функции 'str_length()' имеет переменную 'i', которая увеличивается с помощью инструкции' for() 'AND с тело цикла 'for()', поэтому возвращаемое значение будет (приблизительно) в два раза больше фактической длины строки. предложите написать: 'for (i = 0; lang [i]; i ++);' Обратите внимание, что второй параметр является просто истинным (не равным нулю) или false (0), который является всем, что необходимо – user3629249

+0

относительно: 'while (1 = = scanf ("% [^ \ n]", язык)) 'при использовании'% [^ \ n] 'всегда включает модификатор MAX CHARACTERS (который меньше длины входного буфера), чтобы гарантировать, что вход буфер не переполняется. Такое превышение приводит к неопределенному поведению и может/приведет к событию сбоя seg. Предложить: 'while (1 == scanf ("% 99 [^ \ n] ", язык))' – user3629249

ответ

2

Ваша функция str_length() ожидает аргумент char как аргумент, но вы передаете ему char * (указатель, который указывает на строку) в вызове. поэтому в аргументе функции вы должны использовать обозначение или массив указателей. Как

int str_length(char lang[]) 
{ 
    //code 
} 

или

int str_length(char *lang) 
{ 
    //code 
} 
0

Вам нужно изменить определение функции, как

int str_length(char lang) 
... 

в

int str_length(char *lang) 

Проблема в том lang является char переменной, поэтому он не может быть доступна как lang[i]. Вы намерены использовать его как массив или указатель.

Смежные вопросы

 Смежные вопросы