这个代码就记录在此。道理很简单,就是处理起来略微麻烦。
代码经过测试,运行正常。各种情形应该都考虑到了。
#define LINE_VALID_CHAR(pBuffer,nStart) (pBuffer[nStart] != ' ' && pBuffer[nStart] != '\r' && pBuffer[nStart] != '\n') bool trim(char* pText) { return trim2(pText, NULL); } /** True:当前行有值。 False:当前行无值。 */ bool trim2(char* pText, char* pNew) { int src_len = strlen(pText); if (src_len == 0) { return false; } char* pData = (pNew != NULL ? pNew : pText); int data_end = 0; for (data_end=src_len-1; data_end>=0; data_end--) { if (LINE_VALID_CHAR(pText, data_end)) { break; } } //全部是无效值 if (data_end < 0) { pData[0] = 0; return false; } int data_start = 0; for (data_start=0; data_start<data_end; data_start++) { if (LINE_VALID_CHAR(pText, data_start)) { break; } } int data_len = data_end-data_start+1; if (data_len == 0) { pData[0] = 0; return false; } if (data_start > 0 || data_end < (src_len-1)) { strncpy(pData, pText+data_start, data_len); pData[data_len] = 0; } return true; }