【发布时间】:2019-07-22 03:18:26
【问题描述】:
我正在创建一个类似于 bash 的 shell。尝试获取与命令关联的参数时遇到错误(即 ls -l)。我在网上搜索过,没有发现任何有用的东西。
char *userInCopy;
char *ret;
userInCopy = (char*)calloc(1024, sizeof(char));
ret = (char*)calloc(64, sizeof(char));
strcpy(userInCopy, userIn);
int i = 0;
while((ret = strsep(&userInCopy, " "))){
*(args + i) = (char*)calloc(strlen(ret), sizeof(char));
strcpy((*(args+i)), ret);
i++;
ret = (char*) realloc(ret, (64)* sizeof(char));
}
我在 char userIn 中从用户那里获得输入,并且分配正确。然后我使用 strsep 解析输入,分别获取每个参数。我可以得到 ls 参数和 -l 参数,但是当它在 -l 之后进入 realloc 时,它给了我“realloc():无效指针”错误。我不知道为什么这会在获得 ls 参数后第一次起作用,但在获得 -l 参数后却失败了。有什么建议吗?
【问题讨论】:
-
你给
realloc的尺寸是新的total尺寸。这不是它应该添加多少额外的东西。另请注意,您永远不应分配回您传入的指针,因为realloc可能会失败并返回NULL,在这种情况下您会丢失原始指针。最后,在 C 中你 should not cast the result ofmalloc,callocorrealloc. -
另外,
strsep函数是 POSIX 标准函数,而不是 C 标准函数。只是让您知道是否要在其他平台上使用它。 -
文体要点:不要使用
*(args + i)。相反,使用等效但更清晰的args[i]。