【发布时间】:2011-11-26 23:47:10
【问题描述】:
如何知道数组是否在 C 中初始化? strlen() 之类的函数对我没有帮助,因为我不想知道数组是否为空。
【问题讨论】:
如何知道数组是否在 C 中初始化? strlen() 之类的函数对我没有帮助,因为我不想知道数组是否为空。
【问题讨论】:
没有办法在运行时测试它——一个未初始化的数组看起来就像一个用垃圾初始化的数组。
根据您正在执行的操作,您需要要么 来确保数组实际上已初始化或 显式传递一个标志,告诉您是否在数组还有意义。
另外请注意,“数组是否为空”在 C 中并不是一个非常有意义的概念。数组只是那里,它总是包含任意数量的位是表示它声明的元素所必需的。这些位可能没有有意义的值,但它们总是存在的。
【讨论】:
您不能使用编程语言功能。
但你可以通过设计和纪律。在声明时将您的数组设置为指向 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、linkedlist、HashSets等的库。对于C,我使用了很多Glib函数。
【讨论】: