2

我正在尝试制作字符串数组,我有rLine从标准输入读取行的函数,我需要将每个输入的行保存在数组中,但我不知道输入的字符串行的数量。所以我需要动态增加数组大小来存储它们,我写了这样的代码:

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;
}

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

4

1 回答 1

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;
}

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

于 2012-11-20T22:48:51.603 回答