我已经有一段时间遇到同样的问题了,无论进行多少研究,我似乎都无法理解它。我想出了一些理论,为什么它可能会发生。
基本上,我正在编写一个简单的 C shell,但在尝试实现要存储在二维数组中的别名时遇到了一个恼人的错误。每当我尝试为数组分配多个别名时,它都会覆盖第一个元素。
我认为这可能归结为:
- 再次标记输入时的内存问题
- 数组“衰减”和指针的问题
- 我的编译器讨厌我。
这是我的代码:
void fillArray(char* tokens[], char* aliasArray[ALIAS_NO][TOKEN_NUM]) {
/* Integer for the for loop */
int i;
/* Counter for attribute addition */
int counter = 2;
/* Onto the search */
for (i = 0; i < ALIAS_NO; i++) {
if (aliasArray[i][0] == NULL) { /* If there is a space here */
aliasArray[i][0] = tokens[counter-1]; /* Assign the alias */
while (tokens[counter] != NULL) { /* While there is still stuff left */
aliasArray[i][counter-1] = tokens[counter]; /* Add it in */
counter++; /* Increment the counter */
}
return;
}
}
return;
}
其中 ALIAS_NO 和 TOKEN_NUM 分别是值 10 和 50 的预处理器指令。
当我打印 i 的状态时,检查该条目是否为空,并且我还将多维数组中的每个元素初始化为空。
任何帮助将不胜感激。我已经用头撞墙太久了。
谢谢 :)
编辑:我也尝试使用 strcpy() 函数。不幸的是,这会引发分段错误。
编辑:新代码
void fillArray(char* tokens[], char* aliasArray[ALIAS_NO][TOKEN_NUM]) {
/* Integer for the for loop */
int i;
/* Counter for attribute addition */
int counter = 2;
/* Buffer */
char buffer[200];
/* Onto the search */
for(i = 0; i < ALIAS_NO; i++) {
if(aliasArray[i][0] == NULL) { /* If there is a space here */
strcpy(buffer, tokens[counter-1]);
aliasArray[i][0] = buffer; /* Assign the alias */
while (tokens[counter] != NULL) { /* While there is still stuff left */
strcpy(buffer, tokens[counter]);
aliasArray[i][counter-1] = buffer; /* Add it in */
counter++; /* Increment the counter */
}
return;
}
}
return;
}