wxcbsd123 2022-08-25 16:46 采纳率: 87.5%
浏览 94
已结题

C++字符数组写入时缓冲区溢出,急!

1144:单词翻转

时间限制: 1000 ms 内存限制: 65536 KB
提交数: 32682 通过数: 14793
【题目描述】
输入一个句子(一行),将句子中的每一个单词翻转后输出。

【输入】
只有一行,为一个字符串,不超过500个字符。单词之间以空格隔开。

【输出】
翻转每一个单词后的字符串,单词之间的空格需与原文一致。

【输入样例】
hello world
【输出样例】
olleh dlrow

#include<iostream>
#include<cstring>
using namespace std;
int main() {
    char sent[501], a;
    //t为计数器,后面会使用;index为单词起始位置,方便提取单词
    int t = 0, index = 0;
    cin.getline(sent, 501);
    size_t l = strlen(sent);
    //开始翻转
    for (int i = 0; i < l; i++) {
        //如果单词并没有结束,则计数器t+1
        if (sent[i] != ' ') t++;
        //如果单词结束,开始翻转工程
        else {
            //翻转
            for (int j = index; j <= index + t; j++) {
                //交换,空瓶子法
                a = sent[(index + t) - j - 1];//写入溢出位置
                sent[(index + t) - j - 1] = sent[j];//读取无效数据
                sent[j] = a;
            }
            //下一个单词的起始位置设在空格后一位
            index = index + t + 1;
            //计数器归零,为下一次做准备
            t = 0;
        }
    }
    //输出转换后的句子
    for (int i = 0; i < l; i++) {
        cout << sent[i];
    }
    return 0;
}

写入sent时缓冲区溢出
警告 C6386 写入 "sent" 时缓冲区溢出。

我看完循环以后,发现索引并没有超出到。求修改并且指出问题,谢谢。

  • 写回答

2条回答 默认 最新

  • 快乐鹦鹉 2022-08-25 16:54
    关注

    当j等于index+t的时候,sent[(index + t) - j - 1]的下标岂不是-1了???

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

报告相同问题?

问题事件

  • 系统已结题 9月8日
  • 已采纳回答 8月31日
  • 修改了问题 8月25日
  • 创建了问题 8月25日

悬赏问题

  • ¥170 如图所示配置eNSP
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥15 键盘指令混乱情况下的启动盘系统重装