加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

为什么这个反向字符串函数会产生seg错误?

发布时间:2020-12-16 10:22:21 所属栏目:百科 来源:网络整理
导读:我想制作一个反向字符串函数,我这样做了: void reverse_str(char s[]) { int i,j; char ch; for(i = 0,j = strlen(s) - 1; i j; i++,j--) { ch = s[i]; s[i] = s[j]; s[j] = ch; } return ;} 但出于某种原因,当我改变i j到i!= j我得到分段错误.当i和j是指
我想制作一个反向字符串函数,我这样做了:

void reverse_str(char s[])  {
    int i,j;
    char ch;
    for(i = 0,j = strlen(s) - 1; i < j; i++,j--)  {
        ch = s[i];
        s[i] = s[j];
        s[j] = ch;
    }
    return ;
}

但出于某种原因,当我改变i< j到i!= j我得到分段错误.当i和j是指针时也会发生这种情况.为什么?

解决方法

几乎可以肯定,因为i和j相互传递(无论它们是索引还是指针在这里都无关紧要).例如,任何具有偶数个字符的字符串都会出现此问题.

请考虑弦鼓的以下顺序:

0123 <- indexes
     ----
s = "drum",i = 0,j =  3,swap d and m.
s = "mrud",i = 1,j =  2,swap r and u.
s = "murd",i = 2,j =  1,swap u and r,oops,we've passed each other.
s = "mrud",i = 3,j =  0,swap m and d.
s = "drum",i = 4,j = -1,swap who knows what,undefined behaviour.

请注意,对于具有奇数长度的字符串,您将不会遇到此问题,因为我最终等于j(在中间字符处).

i< j check也修复了这个问题,因为它检测到指针相等和指针相互传递.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读