我试图在一个结构体中声明一个单char指针和一个双char指针:
typedef struct string3d {
char **x;
char *y;
} string3d;
我在主程序中声明了这个结构体的数组,然后我解析了字符串的输入,对它们进行标记并将它们传递给这个结构体。在主程序中,我调用一个函数来创建进程,该进程本质上是派生子进程。我像这样将这些字符串令牌传递给execvp:
execvp(*s1->y,s1->x);
这里s1被定义为
struct string3d *s1;
但是在编译时它会这样说:
错误:下标值既不是数组也不是指针。
有什么建议吗?
函数的签名是:
int execvp(const char *file, char *const argv[]);
这相当于:
int execvp(const char *file, char **const argv);
所以你必须这样命名它:
execvp(s1->y, s1->x);
(假设s1
和s2
的类型为string3d *
)
您需要确保s1是指针,而不是结构体。如果它是一个结构体,那么需要s1。X和s1。Y,而不是s1->x和s1-> Y