我正试图找出一种方法来初始化我的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
函数。