【发布时间】:2017-02-23 05:28:55
【问题描述】:
我在使用函数反转字符串时遇到问题。这是我的代码:
#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;
}
'for(i=0; lang[i]!='\0'; i++)' 行中显示了与标题相同的错误。
请帮助我理解问题。
【问题讨论】:
-
language被声明为一个字符数组,但str_length()的原型/签名表示它需要一个字符。也许您的意思是:str_length( char * lang );* -
函数
str_length()的变量i由for()语句和for()循环的主体递增,因此返回值将是(大约)实际值的两倍字符串的长度。建议写作:for( i=0; lang[i]; i++ );请注意,第二个参数只是真(非零)或假(0),这就是所需要的 -
关于:
while(1==scanf("%[^\n]", language))在使用%[^\n]时始终包含一个 MAX CHARACTERS 修饰符(即比输入缓冲区的长度小一)以确保输入缓冲区不会溢出。这种溢出会导致未定义的行为,并且可能/将导致段错误事件。建议:while(1==scanf("%99[^\n]", language))
标签: c