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

C语言生成反转字符串副本时打印整个字符串为空如何解决

问题原因

你的代码存在3个核心错误,共同导致最终temp字符串打印为空:

  • 初始下标取值错误:strlen(str)返回的是字符串有效字符长度,不包含末尾的\0结束符,因此str[j]初始就是\0,你第一遍循环就把\0复制到了temp[0]的位置。单个字符打印%c不会识别字符串结束符,所以逐字打印正常,但打印整个字符串时碰到首字符\0会直接终止输出,因此temp打印为空。
  • 循环逻辑与复制逻辑不合理:你使用strcpy复制单个字符完全是多余操作,strcpy会从源地址一直复制到\0为止,不仅效率极低还会引发不必要的内存写入。且循环条件str[j] - 1逻辑混乱,极易出现越界。
  • 未手动补字符串结束符:即便你反转复制了所有有效字符,循环结束后也没有给temp追加\0,会导致temp是非法的C字符串,打印时会出现乱码或者异常截断。

修正代码

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

int main(void)
{
    char str[101] = "Lieur a Rueil";
    char temp[101];
    int i = 0;
    // 初始j指向最后一个有效字符的下标
    int j = strlen(str) - 1;

    // 循环到字符串开头为止
    while (j >= 0)
    {
        // 直接赋值单个字符即可,不需要strcpy
        temp[i] = str[j];
        printf("%c", temp[i]);
        j--;
        i++;
    }
    // 手动补充字符串结束符
    temp[i] = '\0';
    printf("\n");
    printf("temp: %s\n", temp);
    return 0;
}

运行输出

lieuR a rueiL
temp: lieuR a rueiL

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 07:15:06