Меня несколько смущает то, что происходит, когда вы вызываете strtok для указателя char в C. Я знаю, что он изменяет содержимое строки, поэтому, если я вызову strtok для переменной с именем 'line', ее содержимое изменится. Предположим, я следую следующему подходу:
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 или она делает эту работу за нас? Кроме того, что произойдет, если «линия» не будет распределена, и я попытаюсь использовать функцию, описанную выше? Вместо этого безопаснее сделать следующее? (Предположим, что программист не будет звонить бесплатно, если он знает, что линия не занята)
Вызов
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
}