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

如何通过for循环将用户输入字符串反向存入数组并输出?

字符串反转程序的问题修正与实现

原代码的核心问题

  • 关键字错误:Int 需改为小写的int,C语言对关键字大小写敏感。
  • 反转逻辑错误:循环中误用scanf读取输入到str1,正确做法是直接从原字符串str中取字符赋值。
  • 索引处理错误:strlen(str)返回字符串长度,比如"abc"长度为3,字符索引是0-2,若从i = strlen(str)开始遍历,会访问到字符串结束符'\0',导致反转后的字符串开头就是结束符,无法正常输出。
  • 缺少字符串结束符:反转完成后未给str1添加'\0',printf("%s")会读取内存垃圾数据。

修正后的实现(额外数组版)

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

int main()
{
    char str[100], str1[100];
    int len, i, j = 0;

    printf("Input string: ");
    // 处理输入前可能残留的换行符,避免空读取
    getchar();
    scanf("%[^\n]", str);

    len = strlen(str);

    // 从原字符串最后一个有效字符开始遍历赋值
    for(i = len - 1; i >= 0; i--) {
        str1[j++] = str[i];
    }
    // 必须添加字符串结束符,保证输出正常
    str1[j] = '\0';

    printf("Reversed string: %s\n", str1);

    return 0;
}

更高效的原地反转版(无需额外数组)

如果不想占用额外数组空间,可以直接在原字符串上交换首尾字符完成反转:

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

int main()
{
    char str[100];
    int len, i;
    char temp;

    printf("Input string: ");
    getchar();
    scanf("%[^\n]", str);

    len = strlen(str);

    // 交换首尾对应位置的字符,循环到字符串中间即可
    for(i = 0; i < len / 2; i++) {
        temp = str[i];
        str[i] = str[len - 1 - i];
        str[len - 1 - i] = temp;
    }

    printf("Reversed string: %s\n", str);

    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 04:35:16