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