1

を使用して文字列の最初の文字を削除したいmemmove

例として、a にstd::stringは以下が含まれる場合があります。

./Folder/File.txt

を削除したい.

私がやっている:

if (newStr[0] == '.')
{
    memmove(newStr, newStr+1, strlen(newStr));
}

エラーが発生します:error: no match for 'operator+' in 'newStr + 1'

私はどんな間違いをしていますか?

char*更新: ああ、私はこれを使用する必要があると思いますstd::string

4

2 に答える 2

6

newStrはstd::stringのように見えます。この場合は、newStr.erase(0,1);を使用する必要があります。

消去の詳細については、このサイトを参照してください

memmoveバッファを直接処理している場合にのみ有効です(char*またはchar[])。memmoveタイプがstd::stringの場合は、そのための関数(消去)を使用し、c_strを試さないでください。

于 2012-11-13T19:03:05.380 に答える
1

これには絶対にmemmoveを使用しないでください。std :: stringのストレージ構造を知っていると想定しており、実装が複数のstd :: stringオブジェクトなどの間でストレージを共有していないと想定しています。これらの想定は、苦痛と悲しみ(および障害)を引き起こします。

于 2012-11-13T19:08:48.363 に答える