2

在main方法中,我在add方法中创建了一个指向字符串的指针数组,我正在重新分配数组大小并添加x元素,当我回到main时我不知道如何知道数组的新大小,我的意思是数组中的元素数?

这是我的代码..(它有一些错误)

#include <stdio.h>

void add(char ***x);

int main()
{
  char **s;
  s = (char **) malloc(sizeof(char *));
  int i;
  add(&s);

  for( i=1;i<=?????(**find the new size of the array** );i++)
    puts(*s[i]);

  return 0;
}

void add(char ***x)
{

  - ** // alter arry add x random datas to the array of string pointer**

  /*
   s[1]="Hello";
   s[2]="Need";
   s[3]="a help";
   s[4]="and help";
   s[5]="for the  help";
   */

  char **data;
  int i = 0;
  for (i = 1; i <= 5; i++)
  {
    data = (char **) realloc(*x, 1 * sizeof(char *));
    data[i] = (char *) malloc(i * sizeof(char *));
    strcpy(data[i], "first");
  }

}

有人可以指出并修复代码中的错误..

4

2 回答 2

3

(边注:

有人可以指出并修复代码中的错误..

嘿,这不是调试器的用途吗?)

长话短说,手动跟踪它:

char **func_that_reallocs(char **ptr, size_t *sz)
{
    char **tmp = realloc(ptr, new_size * sizeof(*ptr));
    *sz = new_size;
    return tmp;
}

并且 不要返回值转换为malloc()!

于 2013-06-27T06:45:35.873 回答
2

始终根据需要向数组中添加一个条目,并将此附加的最后一个条目设置为NULL.

然后编写一个扫描数组的函数,直到它找到这个NULL指针并返回直到那时计数的条目数,你就完成了。

它与 C-“字符串”的概念相同,唯一的区别是使用 aNULL而不是'\0'作为(数组)终止符。

有些人称这最后一个元素也称为“塞子”元素。

这种方法的好处是,不必将数组的大小保存在不同的变量中,这可能与数组的实际大小不同步:大小由数组本身隐式给出。

于 2013-06-27T06:52:56.683 回答