[英]Array of fixed length strings in c
我想以指針的形式在c中有一個固定長度的字符串數組,以便為它動態分配內存。 我可以看到很多對字符串指針數組的引用,但是對我想要實現的卻沒有。
我想要的是能夠聲明一個指向char [MAX_STRING_LENGTH]的指針,以便隨后為所有字符串動態分配一個連續的內存塊:
char *(names[MAX_STRING_LENGTH]); // This won't work
names = (some cast)malloc(NUM_STRINGS * MAX_STRING_LENGTH);
然后訪問字符串數組:
strcpy(name, names[stringIndex]);
如何聲明變量並從malloc轉換指針?
您將names
聲明為指針數組,而不是指向數組的指針。 那會是
char (*names)[MAX_STRING_LENGTH]; // Names is a pointer to an array of char
現在,您可以為指針分配內存:
// Allocate memory for NUM_STRINGS arrays and assign the pointer to names
names = malloc(NUM_STRINGS * sizeof *names);
您想要一個使用cdecl
指向char
數組MAX_LENGTH
的指針(請注意cdecl不理解MAX_LENGTH
之類的東西,因此我們在這里改用數字):
% cdecl
Type `help' or `?' for help
cdecl> declare names as pointer to array 256 of char;
char (*names)[256]
我們得到正確的聲明是
char (*names)[MAX_LENGTH];
然而,這還不是非常有用的,因為realloc
通貨膨脹將是非常昂貴的,因為它可能是最好每一位串移動到新位置。 因此,我建議您仍然使用指向char的指針 。
一些程序員已經提供了解決方案。
通常,由於C / C ++類型可能會變得有些棘手,因此您可以利用任何半透明的IDE查找正確的類型定義。
此技巧依賴於C ++ 11 auto
關鍵字,該關鍵字從其初始值設定項確定變量類型。 結果類型仍然可以在其他C / C ++版本中使用,並且不僅限於C ++ 11。
根據您的情況,指定一種您知道的類型,可以將其轉換為所需的類型:
char names[10][10];
然后分配一個具有所需類型的auto
變量:
auto names2 = &names[0];
檢查名稱的實際類型names2
並使用它。 例如,在Visual Studio中,只需將鼠標懸停在names2
即可查看類型。 大多數IDE都將鼠標懸停在auto
關鍵字或定義的變量上來顯示類型。
對於該示例,懸停將顯示char (*names2)[10]
。
您需要了解Pointer Arrays的概念。請參閱Dennis M. Ritchie&Kernighan撰寫的“ C編程語言”一書。 特別是指針和數組部分。有一些很棒的東西要閱讀。 閱讀並解決了本書中給出的一些問題之后,您可能會更深入地了解指針和數組的概念。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.