我正在制作一个小程序,它将使用一个用动态数组实现的堆栈来检查一个短语是否具有平衡括号和括号。到目前为止,我只是尝试将一个短语传递给isBalanced函数,然后尝试逐个打印出每个char。当程序到达:
printf("%s\n", nextChar(s));
我收到了一个分段错误和一个关于传递类型char和期望类型int的警告。非常感谢。
char nextChar(char* s)
{
static int i = -1;
char c;
++i;
c = *(s+i);
if ( c == '\0' )
return '\0';
else
return c;
}
int isBalanced(char* s)
{
while(nextChar(s) != 0){
printf("%s\n", nextChar(s));
}
return 0;
}
int main(int argc, char* argv[])
{
char* s=argv[1];
int res;
res = isBalanced(s);
return 0;
}
答案 0 :(得分:1)
printf
预计char *
,但此代码
printf("%s", nextChar(s));
给出char
,因为nextChar(s)
返回char
(如果你使用好的编译器,你必须得到警告)。
所以,将其更改为,
printf("%c\n", nextChar(s));
此外,您正在拨打nextChar(s)
两次,失去第一次通话的价值
这应该符合您的期望:
int isBalanced(char* s)
{
char ch;
while((ch = nextChar(s)) != 0){
printf("%c\n", ch);
}
return 0;
}