Как использовать strtok в C правильно, чтобы не было утечки памяти?

Меня несколько смущает то, что происходит, когда вы вызываете strtok для указателя char в C. Я знаю, что он изменяет содержимое строки, поэтому, если я вызываю strtok для переменной с именем 'линия', его содержание изменится. Предположим, я следую следующему подходу:

void function myFunc(char* line) {

    // get a pointer to the original memory block
    char* garbageLine = line;

    // Do some work
    // Call strtok on 'line' multiple times until it returns NULL
    // Do more work

    free(garbageLine);
}

Далее предположим, что 'line' искажается перед передачей в myFunc. Должен ли я освободить исходную строку после использования strtok или это сделает нашу работу за нас? Кроме того, что произойдет, если 'line' не будет преобразован, и я попытаюсь использовать указанную выше функцию? Безопаснее ли вместо этого сделать следующее? (Предположим, что программист не позвонит бесплатно, если он знает, что линия не повреждена)

Вызов

char* garbageLine = line;
myFunc(line);
free(garbageLine);

Определение функции

void function myFunc(char* line) {
    // Do some work
    // Call strtok on 'line' multiple times until it returns NULL
    // Do more work
}
11
задан user246392 15 February 2011 в 05:42
поделиться