gpt4 book ai didi

c++ - 如何在 ANSI C 中 malloc 字符串数组?

转载 作者:太空宇宙 更新时间:2023-11-04 05:10:48 25 4
gpt4 key购买 nike

在 C++ 中,我可以很容易地分配一个字符串数组(比如 10 个字符串):

string* arrayOfString = new string[10];

但是我不知道如何在 ANSI C 中做到这一点。我试过了:

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

但是编译器(MinGW 3.4.5)一直说这是“语法错误”。怎么做才对?谢谢。

最佳答案

如果每个字符串的大小都在编译时已知,比如说是 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]);

演示: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);

关于c++ - 如何在 ANSI C 中 malloc 字符串数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10119890/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com