Просто для удовольствия я пишу программу, которая возьмет введенную пользователем строку (или, возможно, даже текстовый документ) и скремблирует слова в строке.Cleaner Реализация strtok
Я пытаюсь использовать функцию strtok
для разделения каждого слова в строке. На данный момент я чувствую, как моя текущую реализация strtok
небрежно:
int main(int argc, char *argv[])
{
char *string, *word;
if(!(string = getstr())) //function I wrote to retrieve a string
{
fputs("Error.\n", stderr);
exit(1);
}
char array[strlen(string) + 1]; //declare an array sized to the length of the string
strcpy(array, string); //copy the string into the array
free(string);
if(word = strtok(array, " "))
{
//later I'll just write each word into a matrix, not important right now.
while(word = strtok(NULL, " "))
{
//later I'll just write each word into a matrix, not important right now.
}
}
return 0;
}
Я чувствую, что должна быть чист способом реализации strtok
без объявления массива в середине программы. Мне это просто не кажется правильным. Использует ли strtok
правильный путь? Я бы предпочел не использовать массив фиксированного размера, поскольку мне нравится, чтобы все было динамичным, поэтому я начинаю сомневаться в том, что использование strtok
- правильный путь.
'free (string);' Почему? Я не вижу никакого 'malloc',' 'getstr()' распределяет память динамически? –
'char array [strlen (string)];' должен быть 'char array [strlen (string) + 1];' –
@AlokSave 'getstr()' распределяет память динамически. @PaulR Я только что обновил его, спасибо. –