重复矩阵的最后一个元素

时间:2017-08-26 20:46:11

标签: c matrix realloc

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

char** matrix, int 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];
  }

1 个答案:

答案 0 :(得分:1)

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

的大小

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

sizeof != strlen和sizeof不是函数 - 它在complilation期间进行评估。

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