我有一个char ** arr,这是一个字符串数组,我想删除数组的最后一个单元格,或者可能创建一个新的char **但没有最后2个单元格 非常感谢你。
答案 0 :(得分:1)
您知道阵列的大小吗?
代码可能是这样的,假设数组的长度是array_size:
int array_size;
char **array = malloc (sizeof (char*) * array_size);
....
free (*(array+array_size)); *(array+array_size) = NULL;
free (*(array+array_size-1)); *(array+array_size-1) = NULL;
如果您不知道长度,过去使用过的元素为NULL的事实将有所帮助。
然后代码有点复杂:
for (char** ai = array; *ai != NULL; ai++);
ai--;
free(*ai); *ai = NULL;
ai--;
free(*ai); *ai = NULL;
答案 1 :(得分:1)
如何释放数组中最后两个元素指向的内存,将它们设置为零,然后分别跟踪数组的大小。
例如
unsigned int len = 10;
char **aryStr = (char**) malloc(sizeof(char *)*len);
....
free(aryStr[--len])
aryStr[len] = NULL;
free(aryStr[--len])
aryStr[len] = NULL;
您可以将新len用作操作数组的例程的参数。 或者,您可以在数组中创建额外值(sentinel),通过指向NULL来标记数据的结尾。您通过迭代处理数组(如字符串),直到找到NULL值。