例如,我想为最多30个字符的6个字分配一个数组。
我的老师说,我应该分配6 "+1“来计数一个NULL,在插入我的单词后,必须将NULL设置为。
char **array究竟是如何分配的?为什么我的老师要坚持?
发布于 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;赋值为前哨值,则可以以这种方式迭代此数组:
for(const char** ptr=arr; ptr!=NULL; ptr++)
{
printf("%s\n", *ptr); // do something with each string
}但是,如果您知道大小,那么首选的方法是一个普通循环:
for(size_t i=0; i<size; i++)
{
printf("%s\n", arr[i]); // do something with each string
}发布于 2021-03-24 08:56:27
让我们分解一下char **arr = calloc(7, sizeof(char*));,calloc基本上是一个数组,第一个参数是数组的大小,第二个参数是为数组的每个索引分配多少内存。
https://stackoverflow.com/questions/66777546
复制相似问题