#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])..那么为什么会出现这个错误?
答案 0 :(得分:2)
为pop
定义函数原型。那会工作
你得到的错误是因为编译器对函数pop
的定义和声明感到困惑。在使用之前宣布原型是一个好习惯。
如果你再次看到这种类型的错误,请确保它是它!
答案 1 :(得分:2)
您收到这些错误的原因是您的功能缺少prototypes。要么将所有函数移到第一个使用点之前(即在main
函数之前),要么为它们提供原型:
int rev(char s[]);
void push(char c);
char pop();
在缺少原型的情况下,C编译器决定您的pop()
函数返回int
,缺少原型的函数的默认返回类型。一旦编译器发现char
是pop
的实际返回类型,就会发出错误。
答案 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;
}