在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");
}
}
有人可以指出并修复代码中的错误..
答案 0 :(得分:3)
(旁注:
嘿,这不是调试器的用途吗?)有人可以指出并修复代码中的错误..
长话短说,手动跟踪:
char **func_that_reallocs(char **ptr, size_t *sz)
{
char **tmp = realloc(ptr, new_size * sizeof(*ptr));
*sz = new_size;
return tmp;
}
答案 1 :(得分:2)
始终根据需要向数组中添加一个条目,并将此附加条目设置为NULL
。
然后编写一个扫描数组的函数,直到找到这个NULL
- 指针并返回到那时计算的条目数,然后就完成了。
这与C-“字符串”的概念相同,唯一的区别是使用NULL
而不是'\0'
作为(array-)终止符。
有些人称这最后一个元素也是“塞子” - 元素。
这种方法的积极之处在于,不必将数组的大小保存在不同的变量中,这可能与数组的实际大小不同步:大小由数组本身隐式赋予。 / p>