2013-09-24 3 views
2

Я не программист на C, но мне нужно получить простой POC для одного из наших приложений, который может быть расширен с помощью C. У меня есть компиляция кода, передавая данные прямо через мой модуль и мой идея состоит в том, чтобы передать обратную строку символов, переданную в, чтобы доказать, что мой код действительно что-то сделал с данными.Обработка функций и указателей

настоящее время у меня этот код, чтобы пройти каждый вход прямо на выходе:

INFA_CTSetData(outputGroupPorts[i], 
    INFA_CTGetDataStringM(inputGroupPorts[i])); 

INFA_CTGetDataStringM функция определяется как:

char* INFA_CTGetDataStringM(INFA_CT_INPUTPORT_HANDLE dataHandle); 

Я нашел функцию, чтобы изменить строку here

char *mystrrev(char *s) 
{ 
    char *start = s, *t = strchr(s, '\0'); /* point to end of string */ 
    /* 
    * Swap the values at the beginning (pointed to by 's') and the end 
    * (pointed to by 't'); 's' and 't' meet in the middle. 
    */ 
    for (--t/* skip terminating null character */; s < t; ++s, --t) 
    { 
     /* Just your run-of-the-mill swap here. */ 
     char temp = *s; 
     *s = *t; 
     *t = temp; 
    } 
    return start; 
} 

Что я не могу сделать, это передать результат обращения к INFA_CTGetDataStringM по mystrrev и по состоянию на INFA_CTSetData.

INFA_CTSetData(outputGroupPorts[i], 
    mystrrev(INFA_CTGetDataStringM(inputGroupPorts[i]))); 

производит эти ошибки при компиляции

p_Reverse.c:155: error: conflicting types for 'mystrrev' 
p_Reverse.c:145: error: previous implicit declaration of 'mystrrev' was here 

лет, если Visual Basic и C# сделали мою жизнь слишком легко - может кто-нибудь помочь мне получить этот код работает? Я слепо попробовал добавить * и &, чтобы получить разные ошибки компилятора - и теперь я в тупике.

ответ

4
p_Reverse.c:155: error: conflicting types for 'mystrrev' 
p_Reverse.c:145: error: previous implicit declaration of 'mystrrev' was here 

Неявное объявление - настоящая антифауна, оставшаяся от дней дожития. Вы можете включить предупреждения/ошибки (или режим C99), чтобы предотвратить причинение вам вреда.

В строке 145 у вас есть звонок mystrrev, и ваш компилятор предположительно предположил, что он был объявлен int mystrrev(int). Позже, в строке 155, где вы определяете ее как char *mystrrev(char *), она конфликтует с «оригиналом», предположительно, int mystrrev(int).

Добавить объявление вашей функции, прежде чем где-либо он используется (в верхней части файла) следующим образом:

char *mystrrev(char *val); 
Смежные вопросы