南风 知意 2022-10-15 21:54 采纳率: 80%
浏览 27
已结题

一维动态数组传参问题

问题遇到的现象和发生背景

在进行移位动态数组于另一个函数内部重新申请的时候,会由于地址销毁,造成二次初始化失败,所以改用二级指针进行接收,但是会出现已执行断点指令,请问咋解决

用代码块功能插入代码,请勿粘贴截图
#include <iostream>
using namespace std;

void strmncpy(char* s, int m, int n, char**t);

int main()
{
    char s[128] = {'0'};
    char* t = new char[102] {0};
    int m, n;
    cin >> s;     // 输入源串
    cin >> m >> n;     // 输入m和n
    strmncpy(s, m, n, &t);     // 字符串复制
    cout << t << endl;     // 输出复制结果
    return 0;
}

// 函数strmncpy:字符串的部分复制,将s指向字符串从第m个字符开始的n个字符复制的t中
// 参数:s-指向源字符串,t-指向目标字符串,m-起始位置,n-字符个数
// 返回值:无
void strmncpy(char* s, int m, int n, char**t)
{
    // 请在此添加代码,实现函数strmncpy
    /********** Begin *********/
    s = s + m;
    int flag = 0;
    if (m > strlen(s))
    {
        delete[]t;
        char**t = new char*;
        **t = ' ';
        flag = 1; 
    } 
    while ((*s != '\0') && (n > 0)&&flag==0)
    {
        **t = *s;
        s++;
        t++;
        n--;
    }


    /********** End **********/
}

运行结果及报错内容

img

我的解答思路和尝试过的方法

用二级指针接受失败了

我想要达到的结果

实现自定义函数,不报错

  • 写回答

1条回答 默认 最新

  • 浪客 2022-10-15 22:00
    关注

    if (m > strlen(s)),直接给**t='\0';后返回就行了。
    m都超出s范围了,复制没意义

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 10月25日
  • 已采纳回答 10月17日
  • 创建了问题 10月15日

悬赏问题

  • ¥15 微信小程序协议怎么写
  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看