我正在阅读关于修剪的维基百科文章并看到了ltrim的这种实现(左边修剪)
char *
ltrim(char *str)
{
char *ptr;
int len;
for (ptr = str; *ptr && isspace((int)*ptr); ++ptr);
len = strlen(ptr);
memmove(str, ptr, len + 1);
return str;
}
Run Code Online (Sandbox Code Playgroud)
如果我跳过memmove并返回ptr isntead会发生坏事吗?
char *
ltrim(char *str)
{
char *ptr;
int len;
for (ptr = str; *ptr && isspace((int)*ptr); ++ptr);
return ptr;
}
Run Code Online (Sandbox Code Playgroud)
如果你返回ptr- 即,指针值不是原始指针 - 并且如果该指针是唯一指向原始内存块的指针,那么没有人能够执行free()它,并且会有内存泄漏.您不能调用free()指向已分配块中间的指针,而只能调用指向块开头的指针 - 即,仅指向最初返回的指针malloc().
如果由于某种原因你可以确定将保留指向原始块的指针,或者永远不需要释放块,则memmove()不需要; 但这些是对通用实用程序例程的错误假设.
| 归档时间: |
|
| 查看次数: |
335 次 |
| 最近记录: |