我想制作一个反向字符串函数,我这样做了:
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也修复了这个问题,因为它检测到指针相等和指针相互传递.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。