2

私は C プログラマーではありませんが、C で拡張できるアプリケーションの 1 つの単純な POC を取得する必要があります。モジュールを介してデータを直接渡すことによってコードをコンパイルしています。私の考えは、逆を渡すことです。私のコードが実際にデータに何かをしたことを証明するために渡された文字列の。

現在、各入力を出力に直接渡すこのコードがあります。

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

INFA_CTGetDataStringM関数は次のように定義されます。

char* INFA_CTGetDataStringM(INFA_CT_INPUTPORT_HANDLE dataHandle);

ここで文字列を逆にする関数を見つけました

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

1 に答える 1

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);
于 2013-09-24T14:58:05.857 に答える