如何在c中初始化2d数组



我正试图找出一种方法来初始化我的2d字符串数组,我想知道是否有比我下面编码的更好的方法。

是否有一种方法可以不提供数组的大小,因为我将在稍后写入它,所以我不知道大小(目前设置为大小30)。

后期的数组内容示例:"Football","Rugby","Tennis">

char sports_array[30][81];
int i;
for (i=0; i<30; i++){
strcpy(sports_array[i],"");
}

这样做的问题是,如果数组只保存2个值,那么我将不得不仍然循环通过其余的(大小30),我不希望这些将是空的。我需要数组根据它保存了多少值来调整。

任何指导都会很好。

你不必遍历所有的索引

在指针(char*char**)的情况下,您可以测试条件NULL,在字符数组(char[])的情况下,您可以测试''

在您的案例(char sports_array[30][81] = {""})中,您可以执行以下操作:

for (int i=0; sports_array[i][0] != ''; ++i) { ... }

因此丢弃所有空字符串。

如果您使用固定大小的数组(char[]),则始终使用"",{""}{''}初始化。

如果你想使用malloc和它的朋友(因此使用char指针-char*char**),总是确保用NULL初始化指针(手动或calloc)。

如果你能保证你的指针(字符串)被正确初始化,测试NULL''可以(而且大多数)应该是任何循环的条件。

在数组的声明中,你可以这样写:

char sports_array[30][81] = { "" };

在这种情况下,数组中的所有字符都是零初始化的。

如果你想重新初始化它,使数组的每个元素都包含一个空字符串,那么你可以写

for ( size_t i = 0; i < 30; i++ )
{
sports_array[i][0] = '';
}

然后你可以写,例如

strcpy( sports_array[0], "Football" );
strcpy( sports_array[1], "Rugby" );
strcpy( sports_array[2], "Tennis" );

如果你想动态分配字符串,那么你可以像

这样声明数组
char * sports_array[30] = { 0 };

在这种情况下,数组的所有元素都将是空指针。

如果你不知道数组将包含多少个字符串,那么你可以声明一个指针,如

char **sports_array = NULL;

,然后在向数组中添加新字符串时使用realloc函数。

相关内容

  • 没有找到相关文章

最新更新