[英]Passing a dynamically allocated array of pointers by reference C
void parseFile(unsigned *line, char **matrix)
{
FILE *fp;
char buff[cols];
char ***ptr;
ptr = &matrix;
fp = fopen("cazino_heist_maffs.csv", "r");
if (fp == NULL)
{
// return 1;
}
int i = 0;
while (fgets(buff, 255, (FILE *)fp) != NULL)
{
printf("%d: %s\n", *line, buff);
for (i = 0; buff[i] != '?'; i++)
{
matrix[*line][i] = buff[i];
}
(*line)++;
char **tmp;
tmp = realloc(matrix, sizeof(matrix) * ((*line) + 1));
if (tmp == NULL)
{
printf("fail");
// return 1;
}
matrix = tmp;
for (int i = *line; i < (*line) + 1; i++)
{
matrix[i] = malloc(100 * sizeof(char *));
}
}
fclose(fp);
}
所以我有这个方法从文件中读取并填充指向 arrays 的指针。function 在方法内部工作但是当我 go 返回到主矩阵时未填充。
printf("ALL: \n");
for (unsigned i = 0; i < *line; i++)
{
for (unsigned j = 0; matrix[i][j] != '='; j++)
{
printf("%c", matrix[i][j]);
}
printf("\n");
}
如果我把它放在 function 里面,它工作正常,但如果我把它放在 main 里,它就不起作用。
char **matrix;
matrix = malloc2dArray(rows, cols);
//
parseFile(&line, matrix);
这也是我调用该方法的方式。 我假设我按值而不是引用传递我的矩阵,但是我不确定如何使用双指针来传递它。 有什么帮助吗?
要“通过引用”将变量传递给 function,您需要传递它的地址。 您有一个char **
,这意味着它的地址具有类型char ***
。 因此,将其设为 function 的参数类型。
void parseFile(unsigned *line, char ***a_matrix)
{
char **matrix = *a_matrix;
// do stuff
*a_matrix = matrix;
}
并传入地址:
parseFile(&line, &matrix);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.