当我在C语言中调用一个char指针的strtok函数时,我有些困惑它会发生什么。我知道它会修改字符串的内容,所以如果我在名为'line'的变量上调用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);
}
进一步假设在传递给myFunc之前,'line'已经被malloc分配了。在使用strtok后,我是否应该释放原始字符串,还是它会自动完成这个任务?如果'line'没有被malloc分配,并且我尝试使用上面的函数,会发生什么?是否更安全地执行以下操作?(假设程序员知道该行未被malloc分配,因此不会调用free)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
}
myFunc(line); free(line);
- 临时变量是不必要的,因为指针line
通过值传递给了myFunc()
。 - caf