这个代码就记录在此。道理很简单,就是处理起来略微麻烦。

  代码经过测试,运行正常。各种情形应该都考虑到了。

#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;
}