RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1404094
Accepted
Ярослав
Ярослав
Asked:2022-06-27 02:15:05 +0000 UTC2022-06-27 02:15:05 +0000 UTC 2022-06-27 02:15:05 +0000 UTC

需要将一个数组写入另一个长度较小的数组

  • 772

我正在尝试创建一个新数组并将其覆盖在另一个数组中,但是在输出时,除了覆盖数组之外,还会将垃圾推入其中(数组 t)您不能使用函数来处理字符串。我才编程一周,如果还有写代码的意见,那就写吧。

#include <iostream>

using namespace std;

char* get_string(int* len) {
    int capacity = 1;
    char* s = (char*)malloc(sizeof(char));
    char c = getchar();
    while (c != '\n') {
        s[(*len)++] = c;
        if (*len >= capacity) {
            capacity *= 2;
            s = (char*)realloc(s, capacity * sizeof(char));
        }
        c = getchar();
    }
    s[*len] = '\0';
    return s;
}

char* obrabotka_size(int* len,char* f1,int size) {
    int capacity = 1;
    char* t = (char*)malloc(sizeof(char));
    for (int i = 0; i < size;i++){
        t[i] = f1[i];

    }
    cout << "\nt=" << t;
    return t;
}

int  main() {
    int size=0;
    setlocale(LC_ALL, "RUSSIA");
    int len=0;
    char* f1 = get_string(&len);
    cout << "\nf1=" << f1;
    cout << "\nSIZEOF: " << sizeof(f1);
    cout << "\nSize stroki: ";
    cin >> size;
    char* f2 = obrabotka_size(&len,f1,size);
    cout << "\nf2=" << f2 << endl;
    cout << "\nf1=" << f1 << endl;
    delete[] f1;
    return 0;
}
c++ массивы
  • 1 1 个回答
  • 62 Views

1 个回答

  • Voted
  1. Best Answer
    DmitryK
    2022-06-27T20:14:34Z2022-06-27T20:14:34Z

    在函数get_string()之后s=malloc和s=realloc指针s必须检查为NULL。
    为避免最初频繁重新分配内存,请至少从capacity=10.
    函数运行后,get_string()长度等于输入的字符数,您忘记了符号'\0'。
    在函数中obrabotka_size():
    您为 1 字节的数组 t 分配内存。然后在那里复制一个较长的字符串,这会导致未定义的行为,很可能是程序执行期间的错误。
    复制循环进行,直到size从键盘输入。如果初始行小于输入的值,那么至少 - 垃圾将被写入该行之后,作为最大值 - 读取时,您超出了分配的内存,这会导致程序的未定义行为。如果 size 小于原始字符串,则不复制字符串的末尾并且不复制字符'\0'。
    通过 分配malloc和realloc释放的内存free(),而不是delete[]。并且为 2 个数组分配了内存,并释放了 1 个。
    嗯,函数中的小东西obrabotka_size():

    • 传输*len但未使用
    • 声明int capacity = 1但未使用
    • 而不是带有复制的循环,最好使用该功能memcpy
    • 0

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5