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

时间:2017-11-01 21:00:28

标签: c arrays memory memory-management char

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

char my_test[2][10];

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

例如,在我的应用程序char [2]中途可能正在使用中,因此我需要在char数组中使用位置3。然后我会以此结束:

char store[3][10];

但保留最初存储的数据:

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

2 个答案:

答案 0 :(得分:2)

char my_test[2][10];

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

您必须使用DYNAMIC分配。如果您真的使用C或使用C ++ 删除,请检查名为 malloc 免费的内容是你需要的。您还需要了解指针。

答案 1 :(得分:1)

您应该使用标头malloc中声明的标准C函数realloc<stdlib.h>为数组动态分配内存。

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

#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