2017-02-14 99 views
-1

我想长大字符数组的数组如下:如何种植字符数组的数组用C

char input_channel_name[ 20 ][ 36 ]; 

列数永远是36,但行数可以改变。当我打开我的文件,我可以抓住频道名的数量为整数number_of_channels_in

我试图将其转换为后续的代码(有Resizing 2D Arrays in C帮助)没有运气:

#define ROWS 20 
#define COLS 36 

main(argc, argv) 
    char **input_channel_name; 

    input_channel_name = malloc(sizeof *input_channel_name * ROWS); 
     if (input_channel_name) 
     { 
      for (size_t i = 0; i < ROWS; i++) 
       input_channel_name[i] = malloc(sizeof *input_channel_name[i] * COLS); 
     } 

get_input_channels: 
    input_file = fopen(input_name, "rb") 
    fread(plotFileHeader.headerFloats, sizeof(float), 2, input_file); 
    number_of_channels_in = plotFileHeader.headerFloats[ N_CHAN_SUB ]; 
    add_rows = number_of_channels_in - ROWS; 

    char **tmp = realloc(input_channel_name, sizeof *input_channel_name * ROWS + add_rows); 
    if (tmp) 
    { 
     input_channel_name = tmp; 
     for (size_t i = 0; i < add_rows; i++) 
     { 
      input_channel_name[ROWS + i] = malloc(sizeof *input_channel_name[ROWS + i] * COLS); 
     } 
    } 

我一直得到一个

错误C2143:语法错误:缺少';'之前 '类型'

,当我尝试设置input_channel_name = malloc

任何想法?

+2

请花时间来使你的程序适当[MCVE] 。原型主要根据需要,添加缺少包含指令等 – StoryTeller

+1

'main(argc,argv)' - >'int main(int argc,char ** argv){...}' – BLUEPIXY

+0

这不是一个“ char'数组“,但是指向指针的指针。完全不同的数据类型。 – Olaf

回答

0

你的程序崩溃是它将数组视为指针。它们实际上并不是一回事,也不可能让我们通过char**直接访问真正的多维数组。

的指针申报的36个字符的阵列的方法是如下:

char (*p_arr)[36] = NULL; 

要让它指向在malloc第一个这样的阵列-ed方框你通常继续进行:

char (*p_arr)[36] = malloc(row_count * sizeof *p_arr); 

或者,如果你是typedefing排序:

typedef char c_arr_36[36]; 
c_arr_36 *p_arr = malloc(row_count * sizeof(c_arr_36)); 
+0

我会尽力消化这个,并理解它。出于好奇,是在http://stackoverflow.com/questions/39208929/resizing-2d-arrays-in-c不正确的答案?它似乎是我能找到的最直接的答案,并且几乎用它来表示线条。 另外,在你的例子中,数组的变量究竟是什么? * p_arr不是指针吗?那不是我想要避免的吗? –

+0

@ Das.Rot - 答案并不正确,但它不涉及真正的多维数组,这正是您要做的。 'p_arr'确实是一个指针,但它是一个*指向数组*的指针。这是基本的C教程似乎不愿意涵盖的东西。如果你想了解更多,请参阅这篇文章http://stackoverflow.com/questions/42094465/correctly-allocating-multi-dimensional-array – StoryTeller