C字符串反转函数无效求助:调用后字符串未发生反转
C字符串反转函数无法正常工作的问题修复
你的代码里有两个关键错误导致反转失败:
字符串长度计算错误
计算长度时,判断条件写成了*(string + i) != '0'——这里你混淆了字符'0'和字符串结束符'\0'。C语言中字符串是以'\0'作为结束标记的,用'0'会导致程序一直读取内存直到碰巧遇到字符0,len值完全错误,甚至引发越界访问。反转循环逻辑错误
当前的反转循环会把整个字符串交换两遍:从两端开始交换,当n增长到超过j时,之前交换过的字符会被再次交换回来,最终字符串又变回原样。正确的逻辑是只交换到字符串中间位置,当n < j时停止循环。
修正后的代码如下:
#include <stdio.h> char* reverse(char* string); int main(int argc, char* argv[]) { // 原代码的arc是笔误,修正为argc char word[] = "Hello World!"; printf("%s\n", word); printf("%s\n", reverse(word)); return 0; } char* reverse(char* string) { int i, j, n = 0; int len = 0; char temp; // 获取字符串长度 for (i = 0; *(string + i) != '\0'; i++) { len++; } // 反转字符串:只交换到中间位置 for (j = len - 1; n < j; j--) { temp = string[n]; string[n] = string[j]; string[j] = temp; n++; } return string; // 直接返回string即可,和&string[0]等价 }
运行修正后的代码就能得到预期输出:
Hello World!
!dlroW olleH
内容的提问来源于stack exchange,提问作者555lizard
相关产品推荐
相关产品推荐

