使用`memmove`删除std :: string的第一个字符

时间:2012-11-13 18:59:56

标签: c++ string compiler-errors

我想使用memmove

删除字符串的第一个字符

示例,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

2 个答案:

答案 0 :(得分:6)

看起来你的newStr是一个std :: string,在这种情况下你应该使用newStr.erase(0,1);

有关删除

的详细信息,请参阅this site

memmove仅在您直接处理缓冲区(char *或char [])时才有效。如果你的类型是std :: string,请使用它的意思(擦除)功能,不要在c_str上尝试memmove

答案 1 :(得分:1)

绝对不要使用memmove。您假设您知道std :: string的存储结构,并且您假设实现不在多个std :: string对象之间共享存储,等等。这些假设将导致您痛苦和悲伤(以及错误)。