【问题标题】:duplicate last element of matrix复制矩阵的最后一个元素
【发布时间】:2023-04-02 02:30:02
【问题描述】:

在我当前的 C 代码中(请参阅更新),我有一个接收这两个参数的函数:

char** matrix, int max

max 是存储在矩阵中的字符串数量。如果 max 是奇数,我需要将 max 增加 1 并重复矩阵的最后一个元素。

我需要有关如何重新分配此矩阵以复制最后一个元素的帮助。根据我找到的文档,我首先想到解决这个问题,realloc,接受参数void *ptr, size_t size,其中第一个元素是一维数组?

我应该如何处理这个二维矩阵?

更新

char* function(char** matrix, int max) {
  if(max % 2 != 0) {
    max = max + 1;
    printf("%lu", sizeof(matrix[0]));
    matrix = realloc(matrix, sizeof(matrix[0]));
  }
  if(max == 2) {
    ...
    char* ret = malloc(BLOCK_SIZE);
    strncpy(ret, buf2, BLOCK_SIZE-1);
    return(ret);
  }
  char* submatrix[max/2];

  for(int x=0; x<max; x=x+2) {
    ...
    submatrix[x/2] = buf2;
  }
}

更新 2

  if(max % 2 != 0) {
    max = max + 1;
    char* tmp[max];
    for(int x=0; x<max-1; x++)
      tmp[x] = matrix[x];
    tmp[max-1] = matrix[max-2];
  }

【问题讨论】:

  • "在我当前的 C 代码中" --> 发布该代码。
  • “矩阵中字符串的数量”和“重复矩阵的最后一个元素”是指矩阵的每一吗?
  • @meowgoesthedog 是的
  • 与您的代表一起,您应该知道如何发布一个好问题。
  • 只要懂就行。 Stackoverflow 旨在纠正您的任何误解,而不是帮助您调试代码。 (如果我发布答案,出于同样的原因,我担心会受到影响)

标签: c matrix realloc


【解决方案1】:

printf("%lu", sizeof(matrix[0]));这将打印char *的大小

matrix = realloc(matrix, sizeof(matrix[0])); 将仅分配 char * 字节的大小 - 4 或 8,具体取决于系统

sizeof != strlen 和 sizeof 不是函数 - 它是在编译期间评估的。

我建议 - 你应该先开始学习指针(因为从你的代码中你根本不理解它们),然后转向更复杂的东西。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多