首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >双指针数组分配C

双指针数组分配C
EN

Stack Overflow用户
提问于 2021-03-24 08:47:25
回答 2查看 58关注 0票数 0

例如,我想为最多30个字符的6个字分配一个数组。

我的老师说,我应该分配6 "+1“来计数一个NULL,在插入我的单词后,必须将NULL设置为

char **array究竟是如何分配的?为什么我的老师要坚持?

EN

回答 2

Stack Overflow用户

发布于 2021-03-24 09:05:41

听起来,您的老师希望您在数组的末尾使用一个空指针,作为一个前哨值。这类似于单个字符串的空终止,有时在字符串数量未知时也会有用。

当分配单个字符串时,可以执行char* str = malloc(length + 1);,其中+1用于空终止符'\0。额外的+1确保了给定的length = strlen("hello");,我们可以安全地执行strcpy(str, "hello")来填充这个字符串。

您可以对字符串数组执行类似的操作。

char** arr = malloc(sizeof(char*[size+1]));

如果然后将arr[size] = NULL;赋值为前哨值,则可以以这种方式迭代此数组:

代码语言:javascript
复制
for(const char** ptr=arr; ptr!=NULL; ptr++)
{
  printf("%s\n", *ptr); // do something with each string
}

但是,如果您知道大小,那么首选的方法是一个普通循环:

代码语言:javascript
复制
for(size_t i=0; i<size; i++)
{
  printf("%s\n", arr[i]); // do something with each string
}
票数 0
EN

Stack Overflow用户

发布于 2021-03-24 08:56:27

让我们分解一下char **arr = calloc(7, sizeof(char*));,calloc基本上是一个数组,第一个参数是数组的大小,第二个参数是为数组的每个索引分配多少内存。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66777546

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档