簡體   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