如何找到指向字符串的指针数组的新大小

时间:2013-06-27 06:42:23

标签: c gcc libc

在main方法中,我创建了一个指向string的指针数组     在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");
  }

}

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

2 个答案:

答案 0 :(得分:3)

(旁注:

  

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

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

长话短说,手动跟踪:

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

do not cast the return value of malloc()!

答案 1 :(得分:2)

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

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

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

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

这种方法的积极之处在于,不必将数组的大小保存在不同的变量中,这可能与数组的实际大小不同步:大小由数组本身隐式赋予。 / p>