2012-04-12 44 views
0

在C++中,我可以很容易地分配串(比方說10串)的數組:如何malloc在ANSI C中的字符串數組?

string* arrayOfString = new string[10]; 

但是我不知道怎麼做,在ANSI C.我嘗試:

char** arrayOfString = (*(char[1000])) malloc (sizeof (*(char[1000]))); 

但編譯器(MinGW 3.4.5)一直說它是「語法錯誤」。 如何做到這一點? 謝謝。

回答

9

如果每個字符串是在編譯時已知大小相同的,說是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]); 

演示:http://ideone.com/oNA30

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); 
+2

鑄造的malloc的返回,不建議(如[這個答案](http://stackoverflow.com/a/605858/1151654)解釋),但necesseray如果你打算把代碼編譯爲C++。 – Eregrith 2012-04-12 09:24:39

+0

@Eregrith:哦..我不知道哪個是純C的東西,我不知道C-東西太多。感謝您的評論。我編輯了我的帖子。 – Nawaz 2012-04-12 09:47:05

+2

typedef數組?真? – tbert 2012-04-12 10:11:14

0
#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); 
} 
+0

它應該是(i = 0; i Castilho 2012-04-12 08:25:37

+0

我認爲你的意思是'我 hmjd 2012-04-12 08:26:09

+0

@hmjd謝謝! – ouah 2012-04-12 08:27:03

1

試試這個分配100字符串。每個字符串最長不超過1000個字符。

char** arrayOfString = (char**) malloc (sizeof(char[100][1000])); 
+0

是的。爲什麼C很難讓人在Stackoverflow的「C」部分理解? – tbert 2012-04-12 10:10:52