Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C语言中存储另一个数组(3D数组)中的数组_C_Arrays_String_File Io_Malloc - Fatal编程技术网

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

在C语言中存储另一个数组(3D数组)中的数组,c,arrays,string,file-io,malloc,C,Arrays,String,File Io,Malloc,我正在编写这个C程序,它使用FGET一次读取一个字符串,然后一次将一个字符串传递给函数 字符串首先收集在一个大小为4的数组(array_buffer)中,然后我有另一个数组(main_buffer),它以相同的顺序存储array_buffer 这应该说清楚 main_buffer[4] = [buffer1,buffer2,buffer3,buffer4] | | | | .........

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

字符串首先收集在一个大小为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;
}
int count=0;
int main_计数=0;
字符**主缓冲区[4];
字符*数组_缓冲区[4];
整型读取器(字符*行字符){
int lent=strlen(行字符);
数组_buffer[count]=malloc((lent+1)*sizeof(char));
strcpy(数组\缓冲区[计数],行\字符);
//这是在创建缓冲区[4]=[line1,line2,line3,line4]
计数++;
如果(计数=4)
{
int行、列、行;
//main_buffer[main_count]=malloc(sizeof(array_buffer)*sizeof(char));
主缓冲区[主计数]=数组缓冲区;
如果(主计数=3)
{
for(col=0;col
这不是3D数组。这是指针数组

main_buffer[main_count] = array_buffer;
这不是复制
array\u buffer
的内容。这是将
main\u buffer
中的一个指针指向
array\u buffer
。每次执行该函数时,都为
array\u buffer
创建一个新的别名,而不是创建一个新的独立缓冲区


与其反复重复使用
array\u buffer
,您可能应该每次
malloc
都使用一个新数组。

它确实输入了,count++在if之前(count==4),因此当它到达该部分时,count已经是4(但其操作就像count=3一样).请你详细说明一下好吗?这些是我感到困惑的部分。我不知道是什么让你感到困惑。我能做的最好是对C中赋值、指针和数组的语义给出一个一般性的解释,如果这是你需要的,它比我能做的要好得多。傻我…我修改并修补了a b这样,我就可以很容易地使用array_buffer[4][4]并做同样的事情,而不会弄乱数组的数组。。。。
main_buffer[main_count] = array_buffer;