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

C 如何找到指向字符串的指针数组的新大小,c,gcc,libc,C,Gcc,Libc,在main方法中,我创建了一个指向字符串的指针数组 在add方法中,我重新分配了数组大小并添加了我不知道的x元素 回到main,我如何知道数组的新大小,我指的是数组中的元素数 这是我的密码。。(它有一些bug) #包括 无效添加(字符***x); int main() { 字符**s; s=(char**)malloc(sizeof(char*); int i; 添加(&s); 对于(i=1;i(旁注: 有人能指出并修复代码中的错误吗 嘿,这不是调试器的作用吗?) 长话短说,手动跟踪它: cha

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

这是我的密码。。(它有一些bug)

#包括
无效添加(字符***x);
int main()
{
字符**s;
s=(char**)malloc(sizeof(char*);
int i;
添加(&s);
对于(i=1;i(旁注:

有人能指出并修复代码中的错误吗

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

长话短说,手动跟踪它:

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

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

然后编写一个函数,扫描数组,直到它找到这个
NULL
-指针,并返回在此之前计数的条目数,这样就完成了

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

有些人把最后一个元素也叫做“stopper”元素


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

hah,因为一个真正的编程问题/问题…加上它让我再次思考。哦,古老的金色C时代。。。(链接只是一个很好的阅读,它并不是说你不应该***在你的情况下-对于stringsies它是非常好的)。请注意,这只有在数组被频繁迭代时才有意义。否则每次我们想知道它的长度时,遍历
O(n)
中的列表是没有意义的。(是的,
strlen()
被破坏,帕斯卡震动。)@H2CO3:事实上,对于较大的数组,这种扫描方法通常存在性能问题。OT和yes:从未使用过大于255个字符的字符串,或者同时发生了变化?;-)
char **func_that_reallocs(char **ptr, size_t *sz)
{
    char **tmp = realloc(ptr, new_size * sizeof(*ptr));
    *sz = new_size;
    return tmp;
}