C动态字符串数组

时间:2011-10-29 15:59:46

标签: c

我有char * lines [1000]字符串,可以容纳1000个字符。如何创建该字符串的100个数组。这段代码我收到错误。

char * lines[1000];
lines = (lines*)malloc(100 * sizeof(lines));

main.c:19:20:错误:')'令牌之前的预期表达式

4 个答案:

答案 0 :(得分:3)

最简单的方法是:

char lines[100][1000];

可替换地:

char* lines[100];
int i;
for (i = 0; i < 100; i++) {
  lines[i] = malloc(1000);
}
...
for (i = 0; i < 100; i++) {
  free(lines[i]);
}

后者更灵活 - 只需稍加修改 - 它允许您为每个字符串分配不同的内存量。

答案 1 :(得分:3)

看起来你想要一个数组字符串,每个字符串最多包含1000个字符。您的代码存在一些问题。

  1. 你已经声明了一个char *的数组,但你真正想要的是一个指向char数组的指针。为此,您的声明应该是

    char (*lines)[1000];
    
  2. 另一方面,你不应该忘记字符串末尾的NULL字节,而应该改为声明

    char (*lines)[1001];
    
  3. 要设置指针,您需要使用

    lines = (char (*)[1001]) malloc(100 * sizeof(char[1001]));
    

    lines = (char (*)[1001]) malloc(100 * sizeof(*lines));
    

    后者正常工作,因为lines指向char s的数组,*lines a char[1001]。请记住确保没有得到NULL指针。

  4. 最后,你应free malloc使用<{p>

    free(lines);
    

答案 2 :(得分:1)

您可以将for循环写为:

char * lines[1000];

int i = 0;

for (i = 0; i < 1000; i++)
{
    lines[i] = (char*)malloc(100 * sizeof(lines));
}

不要忘记释放所有指针所指向的内存

for (i = 0; i < 1000; i++)
{
    free(lines[i])
}

答案 3 :(得分:0)

为什么不创建二维数组?