C 错误-下标值既不是数组,也不是指针或向量

C 错误-下标值既不是数组,也不是指针或向量,c,C,我在使用函数反转字符串时遇到问题。这是我的密码: #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;

我在使用函数反转字符串时遇到问题。这是我的密码:

#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;
}
#包括
int str_长度(char lang);
int main()
{
字符语言[100];
int字符串长度;
而(1==scanf(“%[^\n]”,语言))
{
字符串长度=字符串长度(语言);
}
int i;
对于(i=字符串长度;i>=0;i--)
{
printf(“%c\n”,语言[i]);
}
返回0;
}
int str_长度(字符长度)
{
int i;
for(i=0;lang[i]!='\0';i++)
{
i++;
}
返回i;
}
与标题相同的错误显示在“for(i=0;lang[i]!=”\0';i++)行中


请帮助我理解这个问题。

您需要将函数定义更改为

int str_length(char lang)
...


问题是
lang
char
变量,因此不能像
lang[i]
那样访问它。您希望将其作为数组或指针。

您需要将函数定义更改为

int str_length(char lang)
...


问题是
lang
char
变量,因此不能像
lang[i]
那样访问它。您希望将其作为数组或指针。

您的函数
str_length()
需要一个
char
作为参数,但您正在调用中向它传递一个
char*
(指向字符串的指针)。因此,必须在函数参数中使用指针表示法或数组。像

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


函数
str_length()
需要一个
char
作为参数,但在调用中要传递一个
char*
(指向字符串的指针)。因此,必须在函数参数中使用指针表示法或数组。像

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


language
声明为字符数组,但是
str_length()
的原型/签名表示它需要一个字符。也许你的意思是:
stru长度(char*lang)
函数
str_length()
的变量
i
for()
语句和
for()
循环体递增,因此返回的值将是字符串实际长度的(大约)两倍。建议写:
for(i=0;lang[i];i++)请注意,第二个参数仅为true(非零)或false(0),这就是所需的全部定义:
而(1==scanf(“%[^\n]”,language))
在使用
%[^\n]
时,始终包含一个最大字符修饰符(即比输入缓冲区长度小一个修饰符),以确保输入缓冲区不会溢出。这种超限会导致未定义的行为,并可能/将导致seg故障事件。建议:
while(1==scanf(“%99[^\n]”,language))
language
声明为字符数组,但
str_length()
的原型/签名表示需要单个字符。也许你的意思是:
stru长度(char*lang)
函数
str_length()
的变量
i
for()
语句和
for()
循环体递增,因此返回的值将是字符串实际长度的(大约)两倍。建议写:
for(i=0;lang[i];i++)请注意,第二个参数仅为true(非零)或false(0),这就是所需的全部定义:
而(1==scanf(“%[^\n]”,language))
在使用
%[^\n]
时,始终包含一个最大字符修饰符(即比输入缓冲区长度小一个修饰符),以确保输入缓冲区不会溢出。这种超限会导致未定义的行为,并可能/将导致seg故障事件。建议:
while(1==scanf(“%99[^\n]”,语言))