我正在尝试编写自己的shell,到目前为止,我一直使用strtok
获取命令行参数并在白色空格上进行分割。这在大多数情况下都很有效,除非是某些命令使用带有空格的文件路径,例如:
ls -la /users/bayesianStudent/desktop/test\ sample/documents/unread\ stuff
在这些情况下,strtok函数甚至在路径之间分裂。有没有办法避免这种情况,并且例如在上面的命令中只获得3个令牌,例如只有当空格没有前面的/时才能拆分?以下是我目前的代码:
char ** getCommands(char * input )
{
char ** result = NULL;
int spaces = 0;
char * token = strtok(input, " ");
/* split string and append tokens to 'res' */
while (token) {
result = realloc (result, sizeof (char*) * ++spaces);
if (result == NULL)
exit (-1); /* memory allocation failed */
result[spaces-1] = token;
token = strtok (NULL, " ");
}
/* realloc one extra element for the last NULL */
result = realloc (result, sizeof (char*) * (spaces+1));
result[spaces] = 0;
return result;
}