Я немного смущен тем, что происходит, когда вы вызываете 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);
}
Далее предположим, что 'строка' разделяется до того, как она будет передана 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
}