南风 知意 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 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 关于大棚监测的pcb板设计
  • ¥15 stm32开发clion时遇到的编译问题
  • ¥15 lna设计 源简并电感型共源放大器
  • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)