gpt4 book ai didi

c - 将指针传递给 2D VLA 作为填充 C 中行 vector 的函数参数

转载 作者:行者123 更新时间:2023-11-30 15:08:09 26 4
gpt4 key购买 nike

我有一个全局char *在运行时,重新声明为指向声明为 way 的二维数组的指针。 :

char (*A)[N][M] = malloc(sizeof(char[BUF_16][N][M]));

然后我将一个文件读入我的字符串矩阵 A函数 read2mat它使用子例程 tokenizer2DremoveEOF ,这是代码:

void removeEOF(char *s)
{
char *newline = strchr( s, '\n' );
if ( newline )
*newline = 0;
}

void tokenizer2D(char *s, const char *delimiter, char *rowVec)
{
char *saveptr;
char *token = strtok_r(s, delimiter, &saveptr);
int j = 0;
while (token)
{
printf("token: %s ", token);
strcpy(&rowVec[j], token);
token = strtok_r(NULL, delimiter, &saveptr);
j++;
}
fputc('\n', stdout);

}

void read2mat(char filename[], const char delim[], int nrows, int ncols, int maxStrSize, char (*mat)[nrows][ncols])
{

ncols = fmax(ncols, 1);
// open the file for reading
FILE *f = fopen(filename, "r");

// make sure the file opened properly
if(NULL == f)
{
fprintf(stderr, "Cannot open file: %s\n", filename);
return;
}

char linea[maxStrSize];

int i=0;
while (fgets(linea, maxStrSize, f) != NULL)
{
removeEOF(linea); // elimina '\n' del string
tokenizer2D(linea, delim, &mat[i][0]);
linea[0] = '\0';
i++;
}
fclose(f);
}

然后我这样调用它: read2mat(myfile, delim, N, M, BUF_32, A);

虽然在 tokenizer2D该函数正确打印从每一行读取的标记我无法将它们正确读取到 rowVec 的每个元素中,可能是由于索引不好。

最佳答案

更改为

char (*A)[M][BUF_32] = malloc(sizeof(char[N][M][BUF_32]));
...
void read2mat(char filename[], const char delim[], int nrows, int ncols, int maxStrSize, char (*mat)[ncols][maxStrSize])

void read2mat(char filename[], const char delim[], int nrows, int ncols, int maxStrSize, char mat[nrows][ncols][maxStrSize])

调用read2mat(myfile, delim, N, M, BUF_32, A);

关于c - 将指针传递给 2D VLA 作为填充 C 中行 vector 的函数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37587477/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com