如何知道数组是否在C中初始化

时间:2011-11-26 23:47:11

标签: c arrays null strlen

如何知道数组是否在C中初始化?像strlen()这样的函数没有帮助我,因为我不想知道数组是否为空。

2 个答案:

答案 0 :(得分:5)

没有办法在运行时测试它 - 未初始化的数组看起来就像是用垃圾初始化的数组。

根据您正在做的事情,您需要 以确保数组实际初始化显式传递一个标志,告诉您是否在数组是有意义的。

同样请注意“数组是否为空”在C中不是一个非常有意义的概念。数组只是那里,它总是包含任意数量的位是必要的,以表示它声明的元素。这些位可能没有有意义的值,但始终存在。

答案 1 :(得分:2)

您无法使用编程语言功能。

但你可以通过设计和纪律。在声明时,将数组设置为NULL指针。 然后创建一个函数来为指针和相应的释放函数分配内存和值,以便在不再需要时将其销毁,再次将其设置为NULL。然后使每个处理NULL的函数检查为错误条件。

要进行边界识别,请将最后一个元素设置为NULL。

示例:

char* myArray=NULL;

/* other code */

myArray = createMyArray(n_elements);
memset(myArray,0,sizeof(int)*n_elements); /* Set the allocated memory to zero */

/* other code */

myArray[0]=functionReturningAString();
myArray[n_elements-1]=functionReturningAnotherString();

/* other code */

/*Processing*/
char* incr=myArray;
while( incr != NULL){
   processArray(incr);
   incr++;/* Increments by size of char pointer to the next pointer*/
}
free_Array(&myArray);/* this function calls free() and sets myArray to NULL*/

当您需要很高效率时,这是可用的。否则,您应该创建自己的arraylist或使用提供它的现有库。

你需要过多的纪律来跟踪每一个可能的错误情况,所以它可能很烦人。

通常最好只使用提供arraylist,linkedlist,HashSets等的库。对于C,我使用了很多Glib函数。