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];
是编译时常量,这意味着使用该数组所需的内存在应用程序启动之前就已确定。所以你永远无法改变它的大小。
您必须使用动态分配。检查名为 malloc 和 free 的东西,以防你真的使用 C 或 C++ new delete 是您所需要的。您还需要了解指针。
您应该使用在 header <stdlib.h>
.
中声明的标准 C 函数 malloc
和 realloc
为数组动态分配内存
这是一个演示程序,展示了如何分配内存。
#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
我有一个 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];
是编译时常量,这意味着使用该数组所需的内存在应用程序启动之前就已确定。所以你永远无法改变它的大小。
您必须使用动态分配。检查名为 malloc 和 free 的东西,以防你真的使用 C 或 C++ new delete 是您所需要的。您还需要了解指针。
您应该使用在 header <stdlib.h>
.
malloc
和 realloc
为数组动态分配内存
这是一个演示程序,展示了如何分配内存。
#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