2010-10-03 3 views
2

Можно создать дубликат:
Parse string into argv/argcC - Разбор командной строки с неизвестным количеством параметров

Я пытаюсь написать поддельную оболочку, используя C, так что мне нужно быть в состоянии взять команду, а затем x количество аргументов для команды. Когда я фактически запускаю команду, я просто использую execvp(), поэтому мне просто нужно проанализировать аргументы в массиве. Но я не был уверен, как это сделать, не зная точного числа. Я думал что-то в псевдокоде вроде:

while (current char in command line != '\n') 
    if current char is a space, increment a counter 
parse characters in command line until first space and save into a command variable 
for number of spaces 
    while next char in command line != a space 
      parse chars into a string in an array of all of the arguments 

Любые предложения о том, как поместить это в код?

+2

Это, кажется, так же, как [ Разбор строки в ARGV/ARGC ] (http://stackoverflow.com/questions/ 1706551 /). В частности, см. Ответ [GLib] (http://stackoverflow.com/questions/1706551/parse-string-into-argv-argc/1706610#1706610). –

ответ

0

Это та вещь, которая strtok() предназначена для:

#define CMDMAX 100 

char cmdline[] = " foo bar baz "; 
char *cmd[CMDMAX + 1] = { 0 }; 
int n_cmds = 0; 
char *nextcmd; 

for (nextcmd = strtok(cmdline, " "); n_cmds < CMDMAX && nextcmd; nextcmd = strtok(NULL, " ")) 
    cmd[n_cmds++] = nextcmd; 
Смежные вопросы