2013-09-24 118 views
2

我不是C程序員,但我需要爲可以用C擴展的應用程序之一獲得簡單的POC。我通過傳遞數據直接通過我的模塊來編譯代碼,而我的想法是通過傳入的字符串的反向來證明我的代碼實際上已經對數據做了某些事情。處理函數和指針

我目前有這樣的代碼給每個輸入通過直到輸出:

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通過mystrrevINFA_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);