1

我正在制作一个小程序,它将使用通过动态数组实现的堆栈来检查短语是否具有平衡的括号和括号。到目前为止,我只是尝试将一个短语传递给 isBalanced 函数,然后尝试逐个打印出每个字符。当程序到达:

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;
}
4

1 回答 1

1

printfchar *但是, 期望此代码

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;
} 
于 2013-04-20T10:54:29.510 回答