Munich's Ricardo 2023-08-30 16:25 采纳率: 87.5%
浏览 7
已结题

关于#c++#的问题:字符串数据貌似溢出缓冲区

string动态字符串数据貌似溢出缓冲区,在网上未能查阅到相关资料,求解答与订正。
问题

img

#include<bits/stdc++.h>
using namespace std;
int same_num(string x, char y)
{
    int num = 0;
    for (int i = 0; i < x.length(); i++)
    {
        if (x[i] == y)
        {
            num++;
        }
    }
    return num;
}
int solve_p(string X,char Y)
{
    string* xx = new string[same_num(X, Y)]();
    for (int i = 0; i < same_num(X, Y); i++)
    {
        xx[i] = Y;//报错处
    }
    int px;
    stringstream Px;
    Px << xx;
    Px >> px;
    return px;
}
int main()
{
    string A, B;
    char a, b;
    cin >> A >> a >> B >> b;
    cout << same_num(A, a) << " "<<same_num(B, b);
    cout << solve_p(A, a)<<" "<< solve_p(B, b);
    return 0;
}

报错:

img

能正常运行但每次输入数据所得结果都为随机数。

  • 写回答

3条回答 默认 最新

  • 关注

    xx不应该用string *,应该用char *
    另外,不要重复调用same_num函数,会降低你的程序效率。
    char * xx 动态申请空间时,需要多少申请一个char,用来设置字符串结束符。
    代码修改后的运行结果:

    img

    代码修改如下:

    #include<bits/stdc++.h>
    using namespace std;
    int same_num(string x, char y)
    {
        int num = 0;
        for (int i = 0; i < x.length(); i++)
        {
            if (x[i] == y)
            {
                num++;
            }
        }
        return num;
    }
    int solve_p(string X, char Y)
    {
        unsigned int size = same_num(X, Y);
        char* xx = new char[size+1];
        xx[size] = 0;
        for (int i = 0; i < size; i++)
        {
            xx[i] = Y;//报错处
        }
        int px;
        stringstream Px;
        Px << xx;
        Px >> px;
        return px;
    }
    int main()
    {
        string A, B;
        char a, b;
        cin >> A >> a >> B >> b;
        cout << same_num(A, a) << " " << same_num(B, b) << endl;
        cout << solve_p(A, a) << " " << solve_p(B, b) << endl;
        cout << solve_p(A, a) + solve_p(B, b) << endl;
        return 0;
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 9月8日
  • 已采纳回答 8月31日
  • 修改了问题 8月30日
  • 修改了问题 8月30日
  • 展开全部

悬赏问题

  • ¥15 有偿求苍穹外卖环境配置
  • ¥15 代码在keil5里变成了这样怎么办啊,文件图像也变了,
  • ¥20 Ue4.26打包win64bit报错,如何解决?(语言-c++)
  • ¥15 clousx6整点报时指令怎么写
  • ¥30 远程帮我安装软件及库文件
  • ¥15 关于#自动化#的问题:如何通过电脑控制多相机同步拍照或摄影(相机或者摄影模组数量大于60),并将所有采集的照片或视频以一定编码规则存放至规定电脑文件夹内
  • ¥20 深信服vpn-2050这台设备如何配置才能成功联网?
  • ¥15 Arduino的wifi连接,如何关闭低功耗模式?
  • ¥15 Android studio 无法定位adb是什么问题?
  • ¥15 C#连接不上服务器,