在C ++中,我可以非常轻松地分配一个字符串数组(比如10个字符串):
string* arrayOfString = new string[10];
但我不知道如何在ANSI C中这样做。我试过:
char** arrayOfString = (*(char[1000])) malloc (sizeof (*(char[1000])));
但编译器(MinGW 3.4.5)一直说它是“语法错误”。 怎么做对了? 感谢。
答案 0 :(得分:9)
如果每个字符串的大小与编译时已知的相同,比如它是100,那么你可以这样做 1 :
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);
我假设所有1000个字符串的大小sizeOfString
相同。如果它们的大小不同,那么你需要在每次迭代中传递不同的值,如下所示:
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);
答案 1 :(得分:1)
尝试这个分配100个字符串。每个字符串最多为1000个字符。
char** arrayOfString = (char**) malloc (sizeof(char[100][1000]));
答案 2 :(得分: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);
}