我想使用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
答案 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对象之间共享存储,等等。这些假设将导致您痛苦和悲伤(以及错误)。