在我当前的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];
}
printf("%lu", sizeof(matrix[0]));
这将打印char *
的大小
matrix = realloc(matrix, sizeof(matrix[0]));
将仅分配char *
字节的大小 - 4 或 8,具体取决于系统
sizeof != strlen
和 sizeof 不是函数 - 它在编译期间进行评估。
我建议 - 你应该先开始学习指针(因为从你的代码中你根本不理解它们(,然后转向更复杂的东西。