char返回错误

时间:2013-03-05 17:08:57

标签: c

#include<stdio.h>
#include<string.h>
#define MAX 30

void push(char );


char stack[MAX];
int tos=0;

int main(){
    char str[]="Arijit Saha";
   // char *final;
   //   final=(char *)rev(str);
   //   printf("%s",final);
    rev(str);
    getch();
    return 1;
}

int rev(char s[]){
    int i;
    for(i=0;i<strlen(s);i++)
    push(s[i]);
    char reverse[strlen(s)];
    int j;
    for(j=0;j<strlen(s);j++)
    reverse[j]=pop();
    printf("%s",reverse);
    return 1;

}

void push(char c){
     stack[tos]=c;
     tos++;
     }
char pop(){
    tos--;
    return stack[tos+1];

}

错误:C:\ TC \ BIN \ stringrevusingstack.c:38:错误:'pop'的冲突类型 C:\ TC \ BIN \ stringrevusingstack.c:28:错误:先前隐含的'pop'声明在这里

这里我返回char并在char变量中保存返回的char(reverse [i])..那么为什么会出现这个错误?

7 个答案:

答案 0 :(得分:2)

pop定义函数原型。那会工作

你得到的错误是因为编译器对函数pop的定义和声明感到困惑。在使用之前宣布原型是一个好习惯。

如果你再次看到这种类型的错误,请确保它是它!

答案 1 :(得分:2)

您收到这些错误的原因是您的功能缺少prototypes。要么将所有函数移到第一个使用点之前(即在main函数之前),要么为它们提供原型:

int rev(char s[]);
void push(char c);
char pop();

在缺少原型的情况下,C编译器决定您的pop()函数返回int,缺少原型的函数的默认返回类型。一旦编译器发现charpop的实际返回类型,就会发出错误。

答案 2 :(得分:0)

你至少在声明它之前使用了pop()。你必须在使用它之前声明它,至少。

在主要添加之前:

char pop(); //declaration

答案 3 :(得分:0)

在使用之前定义函数或为“pop”函数提供声明(原型),就像使用“push”一样:

void push(char);
char pop();

答案 4 :(得分:0)

添加

char pop(void); 

之后的定义。

答案 5 :(得分:0)

在C中,您必须在使用之前声明该函数。所以,要么你需要把pop(和push)函数放在rev之前;或者你需要几行:

void push(char);
char pop();

另外,我怀疑pop的返回行应该是

return stack[tos];

答案 6 :(得分:0)

问题是因为在第一次遇到pop调用时尚未声明函数pop()。要解决此问题,请定义函数原型或切换定义的位置:

#include<stdio.h>
#include<string.h>
#define MAX 30

char stack[MAX];
int tos=0;

void push(char c)
{
    stack[tos]=c;
    tos++;
}
char pop()
{
    tos--;
    return stack[tos+1]; 
}

int rev(char s[])
{
    int i;
    for(i=0;i<strlen(s);i++)
        push(s[i]);
    char reverse[strlen(s)];
    for(int j=0;j<strlen(s);j++)
        reverse[j]=pop();
    printf("%s",reverse);
    return 1;
}

int main()
{
    char str[]="Arijit Saha";
    //char *final;
    //final=(char *)rev(str);
    //printf("%s",final);
    rev(str);
    getch();
    return 1;
}