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

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

概述我想制作一个反向字符串函数,我这样做了: 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; } 我想制作一个反向字符串函数,我这样做了:

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 ;}@H_301_12@  

但出于某种原因,当我改变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.@H_301_12@  

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

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

总结

以上是内存溢出为你收集整理的为什么这个反向字符串函数会产生seg错误?全部内容,希望文章能够帮你解决为什么这个反向字符串函数会产生seg错误?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1219662.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存