将字符数组指定为函数的参数之一的正确语法是什么?
我不知道自己是否感到压力,无法找到错误,或者因为我已离开C一段时间了。我只是无法发现错误。请帮忙!
#include <stdio.h>
#include <string.h>
void reverseWord(int len, char[] str, int index)
{
int start, end;
char temp;
start = index - len;
end = index - 1;
while (start <= end)
{
temp = str[start];
str[start] = str[end];
str[end] = temp;
start++;
end --;
}
}
void main()
{
int i,j=0, len;
int tmp = 0;
char str[]="i am a loser";
char word[]= " ";
len = strlen(str);
for(i=0;i<len;i++)
{
if(str[i] == ' ')
{
tmp = strlen(word);
if(tmp != 0)
{
reverseWord(tmp , str ,i);
j = 0; <<ERROR PRONE LINE>>
}
}
else
word[j++]=str[i];
}
printf ("final string = %s",str);
}
我一直收到此错误
error: expected ‘;’, ‘,’ or ‘)’ before ‘str’ on line marked above
答案 0 :(得分:3)
您缺少第}
行
if(str[i] == ' ')
答案 1 :(得分:2)
问题出在str
函数reverseWord
的定义中。而不是char[] str
,如果将其修改为char* str
,则编译将成功。
如果您希望使用[]
概念,那么一个可能的解决方案可能是将新数据类型定义为
typedef char myArrStr[100];
将myArrStr
定义为100个元素的字符数组。
在reverseWord
的函数定义中,您可以将定义修改为
void reverseWord(int len, myArrStr str, int index)
str
的定义可以修改为
myArrStr str = "i am a winner"; // Changed your message :-)
通过这些更新,您的代码应该可以正常工作。
答案 2 :(得分:1)
你忘记了一个大括号
if(str[i] == ' ')
{
tmp = strlen(word);
if(tmp != 0)
{
reverseWord(tmp , str ,i);
j = 0; <<ERROR PRONE LINE>>
}
}
else
{
word[j++]=str[i];
}
答案 3 :(得分:1)
有一个缺失的右括号应该在else
语句的正上方。
另外,总是围绕if
或else
语句的内容包含大括号是一个非常好的主意,因为如果您最后添加另一行,只会在下面添加另一行。将执行if
或else
语句(此错误很难发现)。
更正后的代码:
#include <stdio.h>
#include <string.h>
void main()
{
int i,j=0, len;
int tmp = 0;
char str[]="i am a loser";
char word[]= " ";
len = strlen(str);
for(i=0;i<len;i++)
{
if(str[i] == ' ')
{
tmp = strlen(word);
if(tmp != 0)
{
reverseWord(tmp , str ,i);
j = 0; <<ERROR PRONE LINE>>
}
}
else
{
word[j++]=str[i];
}
}
printf ("final string = %s",str);
}
答案 4 :(得分:1)
reverseWord
函数定义在哪里?您需要包含它所定义的文件:
#include "otherfile.h"
如果在同一文件中定义了该功能,则可以将reverseWord
功能移到main。