2302_81292835 2024-04-25 15:52 采纳率: 87.8%
浏览 31
已结题

C语言输出字符串的逆序

C语言输出字符串的逆序这样写哪里有问题,代码显示出错应该是哪里的逻辑有问题

img

  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-04-25 15:52
    关注

    引自免费微信小程序:皆我百晓生

    在提供的代码中,存在一些错误。以下是修改后的正确版本:

    #include<stdio.h>
    #include<string.h>
    
    void reverseString(char a[]) {
        int i, k;
        
        k = strlen(a);
        for (i = 0; i < k / 2; i++) { // 修改了循环条件为 i < k/2,因为只需要交换一半的字符对
            char temp = a[i]; // 将临时变量temp用于存储a[i]的值,避免覆盖
            a[i] = a[k - 1 - i];
            a[k - 1 - i] = temp; // 使用temp将原来的a[k-1-i]的值赋给a[i]
        }
    }
    
    int main() {
        char a[100]; // 更改数组长度为100,以防止输入过长的字符串导致缓冲区溢出
        fgets(a, sizeof(a), stdin); // 使用fgets代替gets,因为它更安全,可以指定最大读取长度,并且不会读取换行符
        
        reverseString(a);
    
        printf("%s", a);
        return 0;
    }
    

    主要修复了以下几个问题:

    1. 函数str的返回类型应改为void,因为这个函数并不需要返回任何整数值。
    2. 函数定义和实现中的参数名不匹配,应该都使用a[]或者char *a
    3. 循环体内的逻辑有误,你应该使用一个临时变量(这里命名为temp)来保存字符,然后再进行交换,否则你会丢失原始的a[i]值。
    4. main()函数中,将gets替换为fgets,以避免缓冲区溢出的安全问题。同时,增加了sizeof(a)作为第二个参数,限制了从标准输入读取的字符数。
    5. 更改了char a[]的大小为char a[100],以容纳可能的最长输入字符串。

    现在这个修正后的代码应该可以正常工作,将输入字符串反转并打印出来。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 5月20日
  • 已采纳回答 5月12日
  • 创建了问题 4月25日