2013-04-13 4 views
1

Каков правильный синтаксис для указания массива символов как одного из параметров функции?Каков правильный синтаксис для указания массива символов как параметра функции?

Я не знаю, испытываю ли я стресс и не могу найти ошибку или потому, что я некоторое время находился вне С. Я просто не могу заметить ошибку. Пожалуйста помоги!

#include <stdio.h> 
#include <string.h> 
void reverseWord(int len, char[] str, int index) 
{ 
    int start, end; 
    char temp; 
    start = index - len; 
    end = index - 1; 
    while (start <= end) 
    { 
     temp = str[start]; 
     str[start] = str[end]; 
     str[end] = temp; 
     start++; 
     end --; 
    } 
} 

void main() 
{ 
    int i,j=0, len; 
    int tmp = 0; 
    char str[]="i am a loser"; 
    char word[]= " "; 
    len = strlen(str); 
    for(i=0;i<len;i++) 
    { 
     if(str[i] == ' ') 
     { 
      tmp = strlen(word); 
      if(tmp != 0) 
      {  
       reverseWord(tmp , str ,i); 
       j = 0; <<ERROR PRONE LINE>> 
      } 
     } 
     else 
      word[j++]=str[i]; 
    } 

    printf ("final string = %s",str); 
} 

Я получаю эту ошибку

error: expected ‘;’, ‘,’ or ‘)’ before ‘str’ on line marked above 
+1

Какая строка обозначена? (сообщение об ошибке указывает, что строка отмечена) – Nate

+0

это примерно как «слишком локализованный», поскольку он получает ... –

+0

@Nate Я четко написал в коде как << << ERROR PRONE LINE >> ' –

ответ

2

Вопрос относится к определению str в функции reverseWord. Вместо char[] str, если вы измените то же самое до char* str, ваша компиляция будет успешной.

Если вы хотите использовать [] концепцию, то один из возможных решений может быть, чтобы определить новый тип данных, как

typedef char myArrStr[100]; 

, который определяет myArrStr быть массивом персонажу 100 элементов.

В определении функции из reverseWord, вы можете изменить определение

void reverseWord(int len, myArrStr str, int index) 

Определение str может быть изменено

myArrStr str = "i am a winner"; // Changed your message :-) 

С этими обновлениями, ваш код должен просто работать нормально.

+0

Спасибо! Это исправило проблему! –

+0

@Ganesh Вы можете повторно открыть вопрос (так как ваша репутация> 3000), если вы считаете, что проблема была решена с внесенными мной изменениями. – lifebalance

3

У вас не хватает закрывающей скобки } для линии if(str[i] == ' ')

+0

Извините за ввод в заблуждение, но это была типичная ошибка. Я исправил это в вопросе. Это означает, что на самом деле это не ответ :( –

1

Вы забыли закрывающую скобку

if(str[i] == ' ') 
{ 
      tmp = strlen(word); 
      if(tmp != 0) 
      {  
       reverseWord(tmp , str ,i); 
       j = 0; <<ERROR PRONE LINE>> 
      } 
} 
else 
{ 
      word[j++]=str[i]; 
} 
+0

Я исправил эту ошибку при вводе stackoverflow. Но по-прежнему существует реальная ошибка :( –

1

Там недостающее закрывающая скобка, которая должна быть расположена выше else.

Кроме того, это очень хорошая идея, чтобы всегда иметь фигурные скобки, окружающие содержимое инструкции if или else, потому что если вы в конечном итоге добавив еще одну строку в более позднее время только один непосредственно ниже заявление if или else будет выполняться (эту ошибку может быть очень сложно определить).

Исправленный код:

#include <stdio.h> 
#include <string.h> 

void main() 
{ 
    int i,j=0, len; 
    int tmp = 0; 
    char str[]="i am a loser"; 
    char word[]= " "; 
    len = strlen(str); 
    for(i=0;i<len;i++) 
    { 
     if(str[i] == ' ') 
     { 
      tmp = strlen(word); 
      if(tmp != 0) 
      {  
       reverseWord(tmp , str ,i); 
       j = 0; <<ERROR PRONE LINE>> 
      } 
     } 
     else 
     { 
      word[j++]=str[i]; 
     } 
    } 

    printf ("final string = %s",str); 
} 
+0

Извините за ввод в заблуждение. Я изначально сделал ошибку ввода. Это не ошибка –

1

Где функция reverseWord определена? Вам нужно будет включать в себя файл, он определен в:

#include "otherfile.h"

Если функция определена в том же файле вы можете переместить функцию reverseWord выше основной.

+0

, пожалуйста, взгляните при обновленном коде –

Смежные вопросы