我很好奇修剪字符串的正确方法是确保不会发生内存泄漏。我猜这可能真的是一个基于free()工作原理的问题。我已经包含了我的trim()函数的代码。见下文。字符串修剪会导致内存泄漏?
int main()
{
char* testStr1 = strdup("some string");
char* testStr2 = strdup(" some string");
char* testStr3 = strdup("some string ");
trim(&testStr1);
trim(&testStr2);
trim(&testStr3);
free(testStr1); // no memory leak
free(testStr2); // possible memory leak?
free(testStr3); // possible memory leak?
return 0;
}
int trim(char** pStr)
{
if(pStr == NULL || *pStr == NULL)
return FAILURE;
char* str = *pStr;
while(isspace(*str)) {
(*pStr)++;
str++;
}
if(*str == 0) {
*pStr = str;
return SUCCESS;
}
char *end = str + strlen(str) - 1;
while(end > str && isspace(*end))
end--;
*(end+1) = 0;
*pStr = str;
return SUCCESS;
}
。指定的函数处理客户端代码的问题,而不是引入新的杂技。 – grossvogel 2010-09-20 23:58:17
值得注意的是'memmove()'对实现选项#3很有用。 – caf 2010-09-21 00:19:52