【问题标题】:How to grow array of character arrays in C如何在C中增加字符数组的数组
【发布时间】:2017-07-03 03:22:52
【问题描述】:

我正在尝试增加以下字符数组:

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

有什么想法吗?

【问题讨论】:

  • 请花时间使您的程序成为正确的minimal reproducible example。根据需要原型 main,添加缺少的包含指令等。
  • main( argc, argv ) --> int main( int argc, char **argv ){ ... }
  • 这不是“char 数组的数组”,而是指向指针的指针。完全不同的数据类型。
  • 抱歉,C 是我的氪石,我正在处理一个超过 10,000 行代码的项目。我只是想更新数组,以便我可以在运行时分配内存。我认为这将是一个快速修复,但事实证明并非如此。我将努力精简我的代码,但我不知道如何构建一个完整且可验证的示例,因为它一开始就无法编译。

标签: c arrays multidimensional-array char malloc


【解决方案1】:

您的程序的失败在于它将数组视为指针。它们实际上并不相同,您不能使用char** 直接访问真正的多维数组。

36个字符数组的指针声明方式如下:

char (*p_arr)[36] = NULL;

要让它指向malloc-ed 块中的第一个这样的数组,您可以正常进行:

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

或者,如果你是类型定义排序:

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

【讨论】:

  • 我将尝试消化并理解它。出于好奇,stackoverflow.com/questions/39208929/resizing-2d-arrays-in-c 的答案不正确吗?这似乎是我能找到的最直接的答案,并且几乎逐行使用它。另外,在您的示例中,数组的变量到底是什么? *p_arr 不是指针吗?这不是我想要避免的吗?
  • @Das.Rot - 答案并不正确,但它不处理真正的多维数组,而这正是您想要做的。 p_arr 确实是一个指针,但它是一个pointer-to-an-array。这是基本的 C 教程似乎不愿意涵盖的内容。如果您想了解更多信息,请参阅此帖子stackoverflow.com/questions/42094465/…
猜你喜欢
  • 2018-11-28
  • 1970-01-01
  • 2016-06-28
  • 1970-01-01
  • 2020-07-04
  • 2012-11-06
  • 2021-10-01
  • 2021-12-29
  • 1970-01-01
相关资源
最近更新 更多