1

動的配列で実装されたスタックを使用して、フレーズの括弧と括弧のバランスが取れているかどうかを確認する小さなプログラムを作成しています。これまでのところ、フレーズを isBalanced 関数に渡して、各文字を 1 つずつ出力してみました。プログラムが到達したとき:

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

printfただしchar *、このコードは

printf("%s", nextChar(s));

を返します(優れたコンパイラを使用している場合は、警告が必要な場所) charnextChar(s)char

したがって、これを次のように変更します。

printf("%c\n", nextChar(s)); 

また、nextChar(s)2 回呼び出しているため、最初の呼び出しの値が失われます。
これはあなたが期待していることをするはずです:

int isBalanced(char* s)
{
        char ch;
        while((ch = nextChar(s)) != 0){
             printf("%c\n", ch); 
        }
        return 0;
} 
于 2013-04-20T10:54:29.510 に答える