-2
#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] )中。那么为什么会出现这个错误?

4

7 回答 7

2

为 定义一个函数原型pop。那行得通

您得到的错误是因为编译器对 functionpop的定义和声明感到困惑。养成在使用原型之前声明原型的好习惯。

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

于 2013-03-05T17:10:00.760 回答
2

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

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

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

于 2013-03-05T17:10:39.637 回答
0

pop()您至少在声明它之前已经使用过。至少,您必须在使用它之前声明它。

在主要添加之前:

char pop(); //declaration
于 2013-03-05T17:10:45.997 回答
0

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

void push(char);
char pop();
于 2013-03-05T17:11:56.173 回答
0

添加

char pop(void); 

在定义之后。

于 2013-03-05T17:12:36.183 回答
0

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

void push(char);
char pop();

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

return stack[tos];
于 2013-03-05T17:14:43.417 回答
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;
}
于 2013-03-05T17:17:46.860 回答