c中char **的问题

时间:2010-04-25 23:28:33

标签: c

我有一个char ** arr,这是一个字符串数组,我想删除数组的最后一个单元格,或者可能创建一个新的char **但没有最后2个单元格 非常感谢你。

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值。