C 增加 char 数组的 char 数组大小

C Increase char array of char array size

我有一个 char 数组的 char 数组,如下所示:

char my_test[2][10];

如您所见,我的长度为 2,然后是 10。如果我需要增加第一个字符数组 (2),如何动态完成?

例如,在我的应用程序进行到一半时,char[2] 可能正在使用中,因此我需要使用 char 数组中的位置 3。然后我会这样结束:

char store[3][10];

但保留数据最初存储在:

char store[0][10];
char store[1][10];
char store[2][10];
char my_test[2][10];

是编译时常量,这意味着使用该数组所需的内存在应用程序启动之前就已确定。所以你永远无法改变它的大小。

您必须使用动态分配。检查名为 mallocfree 的东西,以防你真的使用 C 或 C++ new delete 是您所需要的。您还需要了解指针。

您应该使用在 header <stdlib.h>.

中声明的标准 C 函数 mallocrealloc 为数组动态分配内存

这是一个演示程序,展示了如何分配内存。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define N   10

int main(void) 
{
    size_t n = 2;
    char ( *my_test )[N] = malloc( n * sizeof( char[N] ) );

    strcpy( my_test[0], "first" );
    strcpy( my_test[1], "second" );

    for ( size_t i = 0; i < n; i++ ) puts( my_test[i] );

    putchar( '\n' );

    char ( *tmp )[N] = realloc( my_test, ( n + 1 ) * sizeof( char[N] ) );

    if ( tmp != NULL )
    {
        my_test = tmp;
        strcpy( my_test[n++], "third" );
    }

    for ( size_t i = 0; i < n; i++ ) puts( my_test[i] );

    free( my_test );

    return 0;
}

程序输出为

first
second

first
second
third