2

ファイルから読み取った文字を含む char バッファーがあります。この char バッファーを取得し、その中で最初の行末文字を見つける必要があります。

この場合の EOL 文字は \n、\r、\f です。

当初、次のことを行う予定でした。

// let's read into our buffer now...
char * m_pLineBuff;
if(!readCharBuf(m_pLineBuff, bytesToRead)) { report("Could not fill line buffer", RPT_ERROR, __PRETTY_FUNCTION__); }

// setup our newline candidates in an array
int iEOLChars[] = {'\n','\f','\r'};

// find the first instance of a newline character
int iEOLPosition = std::find_first_of(m_pLineBuff, m_pLineBuff+bytesToRead, iEOLChars, iEOLChars+3);

ただし、メソッドに char ポインターを渡すことはできないようstd::find_first_ofです。渡すことができるのは整数のみです。コンパイラが提供する正確なエラーは次のとおりです。

error: invalid conversion from ‘char*’ to ‘int’

char バッファーの開始位置と終了位置を定義したので、これは奇妙に思えますが、EOL 文字の最初の出現を探してそれらを反復処理できなかった理由がわかりません。

これを解決する方法についてアドバイスはありますか?を使用する方法はありますfind_first_ofか、または単に char バッファーの各位置を反復処理し、その場所の char が EOL 文字のいずれかと一致するかどうかを確認する必要があります。

私が言及している「find_first_of」関数はこれです:http://www.cplusplus.com/reference/algorithm/find_first_of/

どんな支援も常に感謝しています。

4

3 に答える 3

5

この場合、関数find_first_ofはインデックスではなくポインターを返すので、次を試してください。

char *iEOLPosition = std::find_first_of(m_pLineBuff, m_pLineBuff+bytesToRead, iEOLChars, iEOLChars+3);
于 2011-08-10T06:33:34.303 に答える
1

ここでの問題は型の不一致だと思います:

char * m_pLineBuff;

int iEOLChars[] = {'\n','\f','\r'};

iEOLCharsあなたをchar配列として宣言してみてください。

于 2011-08-10T06:27:48.093 に答える
-1

first_first_of 関数を確認してください 4 つのパラメーターを持つことはできないと思います first_first_of を参照し
てください

于 2011-08-10T06:27:24.567 に答える