C中动态字符串数组

时间:2012-11-20 22:43:09

标签: c multidimensional-array

我正在尝试创建字符串数组,我有函数rLine从stdin读取行,每个输入的行我需要保存在数组中,但我对输入字符串的数量一无所知线。所以我需要动态增加数组大小来存储它们,我写了这样的代码:

char *res[2], *old = res;
while( 1 ){
  line = rLine( stdin ), len = strlen( line );
  res[row] = (char*)malloc( len + 1);
  strcpy( res[row++], line);
  res = (char**) realloc( res, row ); /* adding 1 more row, not sure adding size row? */
  if ( /*some cond*/ ) break;
}

但是这段代码似乎不起作用,如何正确地声明数组并增加它的大小?

1 个答案:

答案 0 :(得分:3)

正如我在评论中所说,指针数组与指针指针不同。您无法尝试将已分配的内存分配给阵列。

您应该将res声明为指针指针,并在使用之前在循环开始时分配内存。

尝试这样:

char **res = NULL, *old = res;
while( 1 ){
  line = rLine( stdin ), len = strlen( line );
  res = (char**) realloc( res, sizeof(char**) * (row + 1) ); /* adding 1 more row, not sure adding size row? */
  res[row] = (char*)malloc( len + 1);
  strcpy( res[row++], line);
  if ( /*some cond*/ ) break;
}

请记住,在大多数情况下,数组会衰减为指针,但下面的处理方式会有所不同。