2013-04-20 82 views
1

我正在做一个小程序,它将使用一个用动态数组实现的堆栈来检查一个短语是否有平衡的括号和括号。到目前为止,我只是尝试将一个短语传递给isBalanced函数,并尝试逐个打印每个字符。当程序到达:指针/函数参数问题?

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

我得到一个分段错误和有关传递类型char和期望类型int.Any帮助警告是非常赞赏。

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; 
} 
+1

你***真的真的真的***需要阅读的printf'手动()'尝试使用它之前。错误是显而易见的。 – 2013-04-20 10:36:58

+0

nextChar(s)返回char,而不是char *。 %s需要char *。 – BLUEPIXY 2013-04-20 10:39:02

+0

printf(“%c \ n”,nextChar(s));这将工作 – 2013-04-20 10:39:25

回答

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