在C++中,我可以很容易地分配串(比方說10串)的數組:如何malloc在ANSI C中的字符串數組?
string* arrayOfString = new string[10];
但是我不知道怎麼做,在ANSI C.我嘗試:
char** arrayOfString = (*(char[1000])) malloc (sizeof (*(char[1000])));
但編譯器(MinGW 3.4.5)一直說它是「語法錯誤」。 如何做到這一點? 謝謝。
在C++中,我可以很容易地分配串(比方說10串)的數組:如何malloc在ANSI C中的字符串數組?
string* arrayOfString = new string[10];
但是我不知道怎麼做,在ANSI C.我嘗試:
char** arrayOfString = (*(char[1000])) malloc (sizeof (*(char[1000])));
但編譯器(MinGW 3.4.5)一直說它是「語法錯誤」。 如何做到這一點? 謝謝。
如果每個字符串是在編譯時已知大小相同的,說是100,那麼你就可以做到這一點:
typedef char cstring[100]; //cstring is a new type which is
//a char array of size 100
cstring *arrstring = malloc (1000 * sizeof (cstring));
int i;
for(i = 0 ; i < 1000 ; ++i)
strcpy(arrstring[i], "some string of size less than or equal to 100");
for(i = 0 ; i < 1000 ; ++i)
printf("%s\n", arrstring[i]);
1注作爲@Eregrith在評論中指出,如果將代碼編譯爲C,則不建議進行轉換。但是,如果將其編譯爲C++,則需要編寫(cstring*)malloc (1000 * sizeof (cstring))
,但在C++中應該避免將代碼編寫爲第一名。 C++中更好的替代方案是std::vector<std::string>
,正如本文後面所解釋的。
如果每個字符串的大小不是在編譯時已知,或每串是大小不同,那麼你可以這樣做:
char **arrstring = malloc(sizeof(char*) * 1000); //1000 strings!
int i;
for(i = 0 ; i < 1000; ++i)
arrstring[i] = (char*) malloc(sizeof(char) * sizeOfString);
我假設同樣大小sizeOfString
所有1000字符串。如果它們是不同的大小,那麼你已經通過在每次迭代中不同的值,這樣的事情:
for(i = 0 ; i < 1000; ++i)
arrstring[i] = malloc(sizeof(char) * sizeOfEachString[i]);
我希望幫助你,我也希望你可以自己做休息。
順便說一句,在C++中,你不應該這樣做:
string* arrayOfString = new string[10]; //avoid new as much as possible!
相反,你應該這樣做:
std::vector<std::string> strings;
strings.reserve(10);
#define N 10 // Number of strings
#define M 20 // Size of the strings
/* Please check malloc return value is not NULL */
char **arrayOfString = malloc(sizeof *arrayOfString * N);
for (i = 0; i < N; i++) {
arrayOfString[i] = malloc(M);
}
試試這個分配100字符串。每個字符串最長不超過1000個字符。
char** arrayOfString = (char**) malloc (sizeof(char[100][1000]));
是的。爲什麼C很難讓人在Stackoverflow的「C」部分理解? – tbert 2012-04-12 10:10:52
鑄造的malloc的返回,不建議(如[這個答案](http://stackoverflow.com/a/605858/1151654)解釋),但necesseray如果你打算把代碼編譯爲C++。 – Eregrith 2012-04-12 09:24:39
@Eregrith:哦..我不知道哪個是純C的東西,我不知道C-東西太多。感謝您的評論。我編輯了我的帖子。 – Nawaz 2012-04-12 09:47:05
typedef數組?真? – tbert 2012-04-12 10:11:14