gpt4 book ai didi

c - 在C中将数组存储在另一个数组(3D数组)中

转载 作者:行者123 更新时间:2023-11-30 17:49:10 25 4
gpt4 key购买 nike

我正在开发这个 C 程序,它使用 fgets 一次读取一个字符串,然后一次将一个字符串传递给函数

首先将字符串收集在大小为 4 的数组 (array_buffer) 中,然后我有另一个数组 (main_buffer),它以相同的顺序存储 array_buffer。

这应该很清楚

main_buffer[4] = [buffer1,buffer2,buffer3,buffer4]
| |
| | .........
| | .........
| V
| [line1,line2,line3,line4]
V
[line1,line2,line3,line4]
| |
| | ........
| V ........
| [G,H,I,J,K,L]
V
[A,B,C,D,E,F](these are arrays of characters representing a string)

这是我的代码

int count = 0;
int main_count = 0;

char **main_buffer[4];
char *array_buffer[4];

int reader(char *line_char){

int lent = strlen(line_char);
array_buffer[count] = malloc((lent + 1)*sizeof(char));
strcpy(array_buffer[count], line_char);
//this is creating buffer[4] = [line1,line2,line3,line4]
count++;

if (count == 4)
{
int row,col,line;
//main_buffer[main_count] = malloc(sizeof(array_buffer)*sizeof(char));
main_buffer[main_count] = array_buffer;

if (main_count == 3)
{
for(col = 0; col<main_count; col++)
{
for(row = 0; row<count; row++)
{
//printf("%s", main_buffer[col][row]);
for(line = 0;line < strlen(main_buffer[col][row]) ;line++)
{
printf("%c",main_buffer[col][row][line]);
}
}
}
main_count = 0;
}

for(row = 0; row<count; row++)
{
free(array_buffer[row]);
}
count = 0; //reverts count back to 0, so that a new array_buffer can be created
main_count++;
}

return 0;
}

我的 printf 语句基本上最终打印了 array_buffer[3] 的内容 4 次,而不是 array_buffer[0] 的内容,然后是 array_buffer[1],然后是 array_buffer[2],最后是 array_buffer[3]。

我无法弄清楚如何解决这个问题,我知道它是一个过时的指针问题,但是我该如何解决这个问题? (malloc 似乎在这里对我不起作用)将不胜感激。

最佳答案

char **main_buffer[4];

这不是 3D 数组。这是一个指针数组。

main_buffer[main_count] = array_buffer;

这不是复制array_buffer的内容。这将 main_buffer 中的指针之一指向 array_buffer。每次执行该函数时,都会为 array_buffer 创建一个新别名,而不是创建一个新的独立缓冲区。

您可能应该每次都malloc一个新数组,而不是重复重用array_buffer

关于c - 在C中将数组存储在另一个数组(3D数组)中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18039762/

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