[英]How to initialize a 2d array in C
我试图找出一种方法来初始化我的二维字符串数组,并且我想知道是否有比我在下面编码的更好的方法来做到这一点。
还有一种方法可以不提供数组的大小,因为我稍后会写给它,所以我不知道大小(当前设置为大小 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[]
),您可以测试'\0'
。
在您的情况下( char sports_array[30][81] = {""}
),您可以执行以下操作:
for (int i=0; sports_array[i][0] != '\0'; ++i) { ... }
因此丢弃所有空字符串。
如果您使用固定大小的数组 ( char[]
),请始终使用""
、 {""}
或{'\0'}
进行初始化。
如果您想与malloc
和朋友一起工作(因此使用 char 指针 - char*
或char**
),请始终确保使用NULL
初始化指针(手动或calloc
)。
如果您可以保证您的指针(字符串)已正确初始化,那么测试NULL
或'\0'
可以(并且大多数情况下)应该是任何循环的条件。
由于您评论说不会修改字符串,因此可以使用指针数组。
#include <stdio.h>
#include <stdlib.h>
int main ( void) {
char *sports_array[30] = { NULL}; // initialize 30 pointers to NULL
int array_count = 0; // count of used pointers.
sports_array[0] = "Football"; // assign a string literal to a pointer
printf ( "%s\n", sports_array[0]);
++array_count;
sports_array[1] = "Rugby";
printf ( "%s\n", sports_array[1]);
++array_count;
for ( int each = 0; each < array_count; ++each) {
printf ( "%s\n", sports_array[each]);
}
return 0;
}
例如,在数组的声明中,您可以编写
char sports_array[30][81] = { "" };
在这种情况下,数组的所有字符都初始化为零。
如果您想重新初始化它,使数组的每个元素都包含一个空字符串,那么您可以编写
for ( size_t i = 0; i < 30; i++ )
{
sports_array[i][0] = '\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
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.