2

我不是 C 程序员,但我需要为我们的一个可以用 C 扩展的应用程序获得一个简单的 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_CTGetDataStringMthroughmystrrev和 on 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 模式)以防止它伤害您。

mystrrev在第145行,您调用int mystrrev(int)了 后来,在第 155 行,您将其定义为char *mystrrev(char *),它与假定为 的“原始”冲突int mystrrev(int)

在使用它的任何地方(朝向文件顶部)添加函数声明,如下所示:

char *mystrrev(char *val);
于 2013-09-24T14:58:05.857 回答