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