2013-04-20 3 views
1

Я делаю небольшую программу, которая будет использовать стек, реализованный с динамическим массивом, чтобы проверить, имеет ли фраза сбалансированные скобки и скобки. До сих пор я просто попробовал передать фразу функции isBalanced и просто попытался распечатать каждый символ по одному. Когда программа получает:Проблема с аргументом указателя/функции?

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

Я получаю ошибку сегментации и предупреждение о прохождении символьного типа и ожидания типа 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

Вы *** действительно очень *** нужно прочитать руководство по 'Е()', прежде чем пытаться использовать его. Ошибка очевидна. – 2013-04-20 10:36:58

+0

следующийChar (s) возврат char, не char *. % s требуется char *. – BLUEPIXY

+0

printf ("% c \ n", nextChar (s)); это будет работать –

ответ

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; 
} 
Смежные вопросы