如何在 ANSI C 中对字符串数组进行 malloc
How to malloc an array of string in ANSI C?
在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("%sn", 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);
我假设所有 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);
试试这个来分配 100 个字符串。每个字符串最多包含 1000 个字符。
char** arrayOfString = (char**) malloc (sizeof(char[100][1000]));
#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);
}
相关文章:
- 使用 jsoncpp 解析 json 数组字符串
- C++ 对象数组字符串输入在控制台上不起作用
- 插入了 C++ 数组字符串数据,但在显示输出时不显示
- 无法区分 JSON 对象/数组/字符串
- 为什么数组(字符串类型)的大小是 24 字节,带有单个空格元素
- 如何使用数组字符串进行输入验证
- (C++) 打印字符数组字符串的单词时出现问题
- 使用Back_inserter从任何位置的输入字符中使用Back_inserter进行过滤数组字符串
- C 函数反转字符数组字符串
- 如何在 c++ 中创建数组(字符串 [] )的向量
- 如何返回数组字符串的指针
- char数组字符串混淆
- 如何从字符数组字符串中提取空格
- 是否可以将 Bitset<8> 的值复制到数组字符串而不转换它们?
- C++数组字符串函数
- 如何在函数中操作字符数组(字符串)的指针,该指针在C / C ++中作为参数传递
- visual将音频文件存储到数组/字符串流C++中
- c++在char数组(字符串)上将what替换为
- 将数组字符串转换为intger c++(初学者)
- 需要设置数组字符串长度,使其恰好为13