因为工作需要,用c语言写了一个读一行的函数,供大家参考:
static BOOL readLine(FILE* file, char** ppBuf) { int nMax = 128; char szBuf[128]; char* pAmountBuf = NULL ; char* pResult; int nLen = 0; int nAmountLen = 0; char* pTmp; BOOL bLoop = TRUE; do { pResult=fgets(szBuf, nMax, file); /* handle error */ if( pResult == NULL && !feof(file) ) { if( pAmountBuf ) free( pAmountBuf); return FALSE; } if( pResult == NULL ) { break; } else if ( (nLen = strlen( szBuf )) < nMax-1 || szBuf[nLen-1] == '\n' ) { if( nLen ==0 ) break; bLoop = FALSE; } nAmountLen += nLen; pTmp = (char*)malloc( sizeof(char)* (nAmountLen + 1) ); if( pTmp == NULL ) { if( pAmountBuf ) free ( pAmountBuf ); return FALSE; } if( pAmountBuf ) { strcpy(pTmp, pAmountBuf ); strcat(pTmp, szBuf); } else { strcpy(pTmp, szBuf); } pAmountBuf = pTmp; } while( bLoop ); if( nAmountLen!=0 && pAmountBuf[nAmountLen-1] == '\n' ) { pAmountBuf[--nAmountLen]=0; } if( nAmountLen!=0 && pAmountBuf[nAmountLen-1] == '\r' ) { pAmountBuf[--nAmountLen]=0; } if( nAmountLen==0 ) { if( pAmountBuf ) free( pAmountBuf ); } else *ppBuf=pAmountBuf; return nAmountLen!=0; }