我们正在尝试在 c 中为我们的项目实现一个 bash shell。现在我正在创建一个函数 addAlias,它基于我们的 AddToken 函数(填充我们的 strArray 结构)。
strArray 结构有一个 **char (字符串数组)和 int 用于数组中的标记数。同样, aliasArray 结构有两个 **char 和一个 int 用于别名的数量。实现几乎相同,所以我不明白 addAlias 函数中的错误来自哪里。
我已经尝试搜索堆栈,并移动代码,但我不知道是什么原因造成的。
这是来自头文件:
typedef struct
{
char** shortcuts;
char** notshort;
int numaliases;
} aliasArray;
void addAlias(aliasArray* instr_ptr, char* short, char* long);
这是来自 c 文件的函数,它应该分别使用参数给出的快捷方式及其别名填充两个数组:
void addAlias(aliasArray* instr_ptr, char* short, char* long)
{
//extend token array to accomodate an additional token
if (instr_ptr->numaliases == 0)
{
instr_ptr->shortcuts = (char**) malloc(sizeof(char*));
instr_ptr->notshort = (char**) malloc(sizeof(char*));
}
else
{
instr_ptr->shortcuts = (char**) realloc(instr_ptr->shortcuts, (instr_ptr->numaliases+1) * sizeof(char*));
instr_ptr->notshort = (char**) realloc(instr_ptr->notshort, (instr_ptr->numaliases+1) * sizeof(char*));
}
//allocate char array for new token in new slot
instr_ptr->shortcuts[instr_ptr->numaliases] = (char *)malloc((strlen(short)+1) * sizeof(char));
instr_ptr->notshort[instr_ptr->numaliases] = (char *)malloc((strlen(long)+1) * sizeof(char));
strcpy(instr_ptr->shortcuts[instr_ptr->numaliases], short);
strcpy(instr_ptr->shortcuts[instr_ptr->numaliases], long);
instr_ptr->numaliases++;
}
这些是我们主函数的声明: aliasArray 别名;
aliases.shortcuts = NULL;
aliases.notshort = NULL;
aliases.numaliases = 0;
这是我为此部分添加的所有代码,当我尝试将其注释掉并使用 gcc -g 运行所有内容时,我收到了一些不相关的警告,但一切运行正常。当它没有被注释掉并且我尝试运行它时,我得到了这些错误:
In file included from commandler.c:1:0:
commandler.h:17:44: error: expected â;â, â,â or â)â before âshortâ
void addAlias(aliasArray* instr_ptr, char* short, char* long);
^
commandler.c:295:44: error: expected â;â, â,â or â)â before âshortâ
void addAlias(aliasArray* instr_ptr, char* short, char* long)