用C语言指针实现字符串反转,代码无编译报错但运行无输出求助
问题排查
- 核心问题1:for循环终止条件逻辑错误
原代码中reverse函数的循环判断条件写为i<0,传入size=6时i初始值为5,5<0判定结果为假,循环完全不会执行。re_word前5个元素都是未初始化的栈空间垃圾值,因此没有可预期的输出。 - 核心问题2:有效字符长度计算错误
原字符串"hello"的有效可打印字符长度为5,你传入的size=6包含了末尾的'\0'终止符。如果直接按size=6反转,会把原字符串末尾的'\0'放到反转后字符串的首位,即便循环执行也会导致打印为空。
修正方案
可正常运行的修改后代码
#include <stdio.h> void reverse(char *p,char *v,int size){ // 修改循环条件为i >= 0,遍历到第一个字符为止 for(int i=size-1,j=0;i>=0;i--){ *(v+j) = *(p+i); j++; } } int main(){ char word[6] = {"hello"}; char re_word[6]; re_word[5]='\0'; // 传入有效字符长度5,不需要反转原字符串的终止符 reverse(word,re_word,5); printf("%s",re_word); }
优化提示
也可以直接调用C标准库strlen函数自动计算字符串有效长度,避免手动传参出错。
内容的提问来源于stack exchange,提问作者elhirchek
相关产品推荐
相关产品推荐

