如何解决c ++用char指针替换char指针的字符
我遇到了一个函数的问题,该函数应该用字符数组 text 替换给定字符数组 src 中的每个字符 c。
首先我计算返回值的长度。然后我插入正确的字符。至少那是我尝试的。
问题是我在返回值处出现了意外行为。有时它只替换第一个匹配的字母。有时是替换每一个添加一个神秘字母。
char *myreplace(const char *src,char c,const char *text){
int mylength=0;
for(int i=0; src[i] != '\0'; i++){
if(src[i] == c)
for(int j=0; text[j] != '\0'; j++){
++mylength;
}
else
++mylength;
}
char *newtext=new char[mylength+1];
int x=0;
for(int i=0; src[i] != '\0'; i++){
if(src[i] == c)
for(int j=0; text[j] != '\0'; j++){
newtext[i+x] = text[j];
++x;
}
else
newtext[i+x]=src[i];
}
return newtext;
}
解决方法
当您用替换字符串替换一个字符时,实际上是双倍递增(i
和 x
),导致每个替换实例跳过一个字符并写入超过分配缓冲区的末尾.
让我们看一个例子:src
是“abc”,text
是“d”,而 ch
是“a”。
当我们替换第一个字符时,我们将 d
写入 newtext
并增加 x
。下一次循环时,我们将第二个源字符 ('b') 写入 newtext[i+x]
,或者当它应该转到 newtext[2]
时写入 newtext[1]
。
最简单的解决方法是在复制替换字符串后将 x
减 1。
您也没有将终止符 '\0'
写入 newtext
字符串的末尾。 (在返回前添加 nexttext[x+i] = 0;
。)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。