Меня несколько смущает то, что происходит, когда вы вызываете 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
}