【问题标题】:Passing String Pointer Array in C在 C 中传递字符串指针数组
【发布时间】:2018-06-03 21:19:16
【问题描述】:

我有一个简单的 C 函数,我想将一组指针传递给各种字符串。我遇到了编译器对我的函数调用参数咆哮的问题。这是我在做什么的简单表示,

myfunction.h

int myServices(int, char *[]);

myfunction.c

#include <myfunction.h>
int myService(int value, char *strpointer[]) {

   ***

}

ma​​inroutine.c

#include <myfuntion.h>
void main () {

   // Initialize Parameters
   int result;
   int stringcnt;
   char string1[8] = "-st";
   char string2[8] = "-ir";
   char * stringptr[10];

   // Initialize stringptr
   stringptr[0] = string1;
   stringptr[1] = string2;
   stringcnt = 2;

   // Call Service
   result = myService(stringcnt, stringptr); <== gcc issue with stringptr

}

C 编译器不断给我一个“成员的无效使用(你忘记了'&'吗?”在 myService 调用中带有 stringptr。我在 myService 调用中尝试了带有 stringptr 的 '&' 和 '*'没有运气的主程序。任何想法。

【问题讨论】:

  • 我注意到的几件事... int myServices(int char *[]); int myService(int value, char *strpointer[]) 不排队?是哪个?
  • 缺少逗号。编辑源代码。
  • void main (argc, argv[]) -- 真的吗?你的书是这么说的?
  • 对错误感到抱歉。我只是在没有使用 IDE 的情况下键入了一个有代表性的示例。只是试图让代码专注于问题。
  • int main()int main( int argc, char * argv[] )(或 char * * argv,这会“更正确”,但出于个人原因我不喜欢)。至于提出minimal reproducible example,您要做的第一件事就是取消多个文件。是的,这就是您希望它在您的项目中的外观。不,这与您在这里提出的问题无关。将试图重现您的问题的人员的工作量减少到最低限度。通常这已经有助于解决一些问题。

标签: c arrays parameter-passing


【解决方案1】:

我运行了您的代码并注意到一些事情:首先在您的头文件中您没有正确定义参数(缺少逗号的情况),同样您的主入口点没有正确的返回类型(需要是 int) 也不是参数 (int argc, char *argv[])。我已经进行了更改并将其附在下面:

 // func.h

int myService(int, char*[]);

然后是功能码:

// func.c

#include "func.h"

int myService(int value, char *strpointer[]) {
        // your code here
        return 0;
}



// prog.c

-

#include "func.h"

int main (int argc, char *argv[]) {

   // Initialize Parameters
   int result;
   int stringcnt;
   char string1[8] = "-st";
   char string2[8] = "-ir";
   char * stringptr[10];

   // Initialize stringptr
   stringptr[0] = string1;
   stringptr[1] = string2;
   stringcnt = 2;

   // Call Service
   result = myService(stringcnt, stringptr);
   return 0;
}

我使用命令gcc -o prog.o prog.c func.c 编译了它,没有错误并且执行顺利。希望这对你有用

【讨论】:

  • 我根据你的验证了我的代码,发现它是等效的。我从“main”中的 myService 调用中删除了“result =”,编译器停止了吠叫。我在 myService 中有正确的返回整数值。不知道为什么会这样,但我有足够的能力继续调试。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-14
  • 2021-06-28
相关资源
最近更新 更多