Я пытаюсь разбить строку (введенную пользователем во время выполнения) на слова (разделенные пробелами) и поместить каждое слово в другой слот в массив. Так, например, если бы я взял строку "hello world"
, array[0]
будет содержать "hello"
и array[1]
будет содержать "world"
. И последний слот (в данном случае array[2]
) будет содержать NULL
. Вот что я до сих пор, что, похоже, не работает должным образом. Любая помощь будет оценена по достоинству. (Кстати, это часть программы, которая будет вызывать execvp(argv[0],argv);
)Поместите каждое слово строки в массив в C
char input[100];
char* argv[20];
char* token;
scanf("%s", input);
//get the first token
token = strtok(input, " ");
int i=0;
//walk through other tokens
while(token != NULL) {
argv[i] = token;
i++;
token = strtok(NULL, " ");
}
argv[i] = NULL; //argv ends with NULL
возможно дубликат [C - разбить строку в массив строк] (http://stackoverflow.com/questions/11198604/c-split- string-in-a-array-of-strings) – indiv
Вам нужно иметь дело с парой проблем: чтение пользовательских данных и разбиение пользовательских данных на токены. Использование ''% s ''формата в' scanf' в цикле должно адекватно обращаться к обоим. –
Можете ли вы объяснить, что «не работает должным образом» означает здесь? Ваша петля проходит через входной массив символов, переписывая каждое пространство, которое оно находит с помощью '' \ 0'', и сохраняет указатели на начало каждого токена. Это звучит так, как вы просите. – iwolf