Я не лучший с указателями, так что, может быть, вы видите, что я делаю неправильно.
Допустим, у меня есть массив, который был инициализирован следующим образом:
char *arrayOfCommands[]={"ls -l", "wc -l"};
Моя цель — получить массив с именем char *currentCommand из этого массива, который просматривает определенную ячейку arrayOfCommands и разделяет команду на части по пробелам.
Моей конечной целью было бы иметь новый массив currentCommand для каждого цикла, каждый из которых выглядел бы так:
First Loop:
currentCommand = [ls][-l]
First Loop:
currentCommand = [wc][-l]
Вот код, который у меня есть до сих пор:
for (i = 0; i < 2; ++i) {
char str[] = arrayOfCommands[i];
char * currentCommand;
printf ("Splitting string \"%s\" into tokens:\n",str);
currentCommand = strtok (str, " ");
while (currentCommand != NULL){
printf ("%s\n",currentCommand);
currentCommand = strtok (NULL, " ");
}
.
.
.
//Use the currentCommand array (and be done with it)
//Return to top
}
Любая помощь будет принята с благодарностью! :)
ОБНОВЛЕНИЕ:
for (i = 0; i < commands; ++i) {
char str[2];
strncpy(str, arrayOfCommands[i], 2);
char *currentCommand[10];
printf ("Splitting string \"%s\" into tokens:\n",str);
currentCommand = strtok (str, DELIM);
while (currentCommand != NULL){
printf ("%s\n",currentCommand);
currentCommand = strtok (NULL, DELIM);
}
}
Я получаю эту ошибку: ** несовместимые типы в назначении**
Это говорит о "str", которую я передаю функции strtok.
strtok()
лучший выбор? Рассматривали ли вы вместо этого использованиеstrcspn()
илиstrpbrk()
или что-то подобное?strtok()
— опасная функция. Если вы используете его в библиотечной функции, вы должны задокументировать это, потому что, используя его, вы наносите ущерб любому, кто вызывает вашу функцию, в то время как сам используетstrtok()
. И вы также должны быть осторожны, чтобы не вызвать любую другую функцию, которая используетstrtok()
по той же причине. Как правило, держитесь подальше отstrtok()
, если только учитель не держит ваши руки в огне и не заставляет вас держать их там. Ищитеstrtok_r()
. - person Jonathan Leffler   schedule 01.10.2012char str[] = arrayOfCommands[i];
? - person Michael Burr   schedule 01.10.2012arrayOfCommands[]
. Если подумать, на первом этапе просто напечатайте каждый токен в отдельной строке, прежде чем пытаться построить массив токенов. - person Michael Burr   schedule 01.10.2012