【问题标题】:Why add one more block of memory after dynamic memory allocation using realloc()?为什么在使用 realloc() 进行动态内存分配之后再添加一块内存?
【发布时间】:2020-12-12 18:30:00
【问题描述】:

Hackerrank 上的字符串排序问题有一个循环来获取二维字符串数组中的输入。此循环使用malloc() 为每个字符串动态分配内存,使用scanf() 获取输入,然后再为该块重新分配一个块。

int n;
scanf("%d", &n);
  
char** arr;
arr = (char**)malloc(n * sizeof(char*));
  
for(int i = 0; i < n; i++){
    *(arr + i) = malloc(1024 * sizeof(char));
    scanf("%s", *(arr + i));
    *(arr + i) = realloc(*(arr + i), strlen(*(arr + i)) + 1);
}

链接:https://www.hackerrank.com/challenges/sorting-array-of-strings/problem

我有两个问题:

  1. 为什么要使用额外的内存块?
  2. 为什么使用scanf()而不是fgets()来获取字符串输入?这不是一个好习惯吗?

【问题讨论】:

    标签: arrays c string memory-management dynamic-memory-allocation


    【解决方案1】:
    1. *(arr + i) = malloc(1024 * sizeof(char));

      它为第 i 个字符串分配 1024 chars,因为最大字符串长度已知

      *(arr + i) = realloc(*(arr + i), strlen(*(arr + i)) + 1);

      在这里它正在调整块的大小以完全适合字符串 i 的大小

    2. 由于输入 scanf 中提供了一个单词就足够了

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-09
      • 2021-11-16
      • 2020-08-11
      • 2020-11-12
      • 1970-01-01
      • 2016-04-10
      相关资源
      最近更新 更多