C 指针/函数参数问题?

C 指针/函数参数问题?,c,pointers,c-strings,C,Pointers,C Strings,我正在制作一个小程序,它将使用一个用动态数组实现的堆栈来检查一个短语是否有平衡的括号和方括号。到目前为止,我只是尝试将一个短语传递给isBalanced函数,然后尝试逐个打印每个字符。当程序到达以下位置时: printf("%s\n", nextChar(s)); 我得到一个分段错误和一个关于传递类型char和期望类型int的警告。非常感谢任何帮助 char nextChar(char* s) { static int i = -1; char c;

我正在制作一个小程序,它将使用一个用动态数组实现的堆栈来检查一个短语是否有平衡的括号和方括号。到目前为止,我只是尝试将一个短语传递给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;
}

printf
需要
char*
,但是,此代码

printf("%s", nextChar(s));
给出
char
,因为
nextChar
返回
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;
} 

printf
需要
char*
,但是,此代码

printf("%s", nextChar(s));
给出
char
,因为
nextChar
返回
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;
} 

在尝试使用之前,您确实需要阅读
printf()
的手册。错误很明显。nextChar(s)返回字符,而不是字符*%s需要char*.printf(“%c\n”,nextChar(s));这将使您感到尴尬。在尝试使用之前,您确实需要阅读
printf()
的手册。错误很明显。nextChar(s)返回字符,而不是字符*%s需要char*.printf(“%c\n”,nextChar(s));这会让你感到尴尬