繁体   English   中英

如何在 C 中初始化二维数组

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM