1

将字符数组指定为函数的参数之一的正确语法是什么?

我不知道是我压力大,找不到错误,还是因为我已经离开 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
4

5 回答 5

3

您缺少该}行的右大括号if(str[i] == ' ')

于 2013-04-13T00:25:37.450 回答
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 :-)

通过这些更新,您的代码应该可以正常工作。

于 2013-04-13T00:49:49.083 回答
1

你忘了一个右括号

if(str[i] == ' ')
{
            tmp = strlen(word);
            if(tmp != 0)
            {    
                 reverseWord(tmp , str ,i);
                 j = 0; <<ERROR PRONE LINE>>
            }
}
else
{
           word[j++]=str[i];
}
于 2013-04-13T00:26:31.517 回答
1

缺少一个右大括号,它应该就在else语句的正上方。

此外,总是在ifor语句的内容周围使用大括号是一个非常好的主意,因为如果您稍后添加另一行,则只会执行or语句else正下方的那一行(这个错误可能真的很难点)。ifelse

更正的代码:

#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); 
}
于 2013-04-13T00:28:53.960 回答
1

函数在哪里reverseWord定义?您将需要包含它定义的文件:

#include "otherfile.h"

如果函数是在同一个文件中定义的,你可以将reverseWord函数移到 main 之上。

于 2013-04-13T00:36:36.017 回答