You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言反转字符串后printf输出空串,求问题原因及解决

字符串反转代码的问题分析与修复

你的代码存在三个关键问题,导致printf输出为空:

  • 未初始化的指针:char *rvsd;仅声明了指针,未分配任何内存空间。直接对rvsd[i]赋值属于访问非法内存,触发未定义行为。
  • 索引初始值错误:right初始化为strlen(str),而字符串最后一个有效字符的索引是strlen(str)-1,第一次赋值会把字符串结束符'\0'放到rvsd[0]的位置,printf遇到结束符直接停止输出,自然显示为空。
  • 循环范围不当:i<=slen会让循环执行slen+1次,超出字符串长度,引发内存越界。

修复方案1:动态分配内存

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main()
{
   char str[50] = "geeksforgeeks";
   // 分配足够内存(含结束符)
   char *rvsd = malloc(strlen(str) + 1);
   if (!rvsd) {
       printf("内存分配失败\n");
       return 1;
   }
   
   int slen = strlen(str);
   int right = slen - 1;

   for(int i = 0; i < slen; i++) {
       rvsd[i] = str[right];
       right--;
   }
   rvsd[slen] = '\0'; // 手动添加字符串结束符

   printf("%s\n", rvsd);
   
   free(rvsd); // 释放内存
   return 0;
}

修复方案2:使用栈上数组(更简单)

#include <stdio.h>
#include <string.h>

int main()
{
   char str[50] = "geeksforgeeks";
   char rvsd[50]; // 直接声明足够大的数组
   
   int slen = strlen(str);
   int right = slen - 1;

   for(int i = 0; i < slen; i++) {
       rvsd[i] = str[right];
       right--;
   }
   rvsd[slen] = '\0';

   printf("%s\n", rvsd);

   return 0;
}

内容的提问来源于stack exchange,提问作者Dave

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 07:30:51