繁体   English   中英

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

[英]storing arrays within another array (3D array) in C

我正在研究这个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语句基本上最终打印了4次array_buffer [3]的内容,而不是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创建一个新别名,而不是创建一个新的独立缓冲区。

取而代之的反复重用array_buffer ,你应该是malloc每一次荷兰国际集团的新数组。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM