如何知道数组是否在C中初始化?像strlen()这样的函数没有帮助我,因为我不想知道数组是否为空。
答案 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函数。