我正在创建一个类似于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():无效指针”错误。我迷失了为什么在获取ls参数后第一次可以使用它,但是在获取-l参数后失败了。有什么建议吗?
答案 0 :(得分:5)
问题是您用ret
返回值覆盖了strsep
。
while((ret = strsep(&userInCopy, " "))) //Here
还有另一个临时变量来存储strsep
返回。
void *realloc(void *ptr, size_t size);
ptr
必须已由先前对malloc(),calloc()的调用返回了 或realloc()。