我很好奇修剪字符串的正確方法是確保不會發生內存泄漏。我猜這可能真的是一個基於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