我最近发现需要std::string用自己的子串替换内容.在这里调用最合乎逻辑的函数我认为如下,来自http://www.cplusplus.com/reference/string/string/assign/:
substring(2) string&assign(const string&str,size_t subpos,size_t sublen);
复制从字符位置subpos开始的str部分并跨越sublen字符(或者直到str的结尾,如果str太短或者如果sublen是string :: npos).str
另一个字符串对象,其值可以复制或移动.subpos
作为子字符串复制到对象的str中第一个字符的位置.如果这大于str的长度,则抛出out_of_range.注意:str中的第一个字符用值0表示(不是1).sublen
要复制的子字符串的长度(如果字符串较短,则复制尽可能多的字符).string :: npos的值表示直到str结尾的所有字符.
但是,我不确定这是否允许,或者它是否可以破坏字符串数据.我知道memcpy(),例如,不允许(或至少不能保证的情况下,非腐败)覆盖的内存区域用(的一部分)本身(见的memcpy()VS的memmove() ).但我不知道上述方法是否有相同的限制.
更一般地说,如果我能够自己找出这个问题的答案,请你评论一下吗?我没有什么链接到该文件中清楚地给我这个问题的答案是什么,除了可能的限定词"另一个"在的描述str参数(" 另一个字符串对象"),这似乎意味着它不能在此对象,虽然我不觉得这是毫不含糊的.这是文档中的弱点吗?
不。
该操作由 [string::assign]/4 定义:
Run Code Online (Sandbox Code Playgroud)basic_string& assign(const basic_string& str, size_type pos, size_type n = npos);效果: 确定要分配为和和 调用
rlen中较小者的字符串的有效长度。nstr.size() - posassign(str.data() + pos rlen)
(数据错别字)
然后:
Run Code Online (Sandbox Code Playgroud)basic_string& assign(const charT* s, size_type n);效果: 将 控制的字符串替换为
*this长度为 的字符串n,该字符串的元素是 指向的字符串的副本s。
这并没有说明是否str.assign(str, 0)安全(特别是,我们无法知道每个角色的副本何时会发生!)。
因此我强烈建议你避免这样做。
| 归档时间: |
|
| 查看次数: |
2576 次 |
| 最近记录: |