C 如何找到指向字符串的指针数组的新大小
在main方法中,我创建了一个指向字符串的指针数组 在add方法中,我重新分配了数组大小并添加了我不知道的x元素 回到main,我如何知道数组的新大小,我指的是数组中的元素数 这是我的密码。。(它有一些bug)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
#包括
无效添加(字符***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;
}