如何知道数组是否在 C 中初始化?像 strlen() 这样的函数对我没有帮助,因为我不想知道数组是否为空。
问问题
7167 次
2 回答
5
没有办法在运行时测试它——一个未初始化的数组看起来就像一个用垃圾初始化的数组。
根据您正在执行的操作,您需要确保数组已实际初始化或显式传递一个标志,该标志告诉您数组中的值是否有意义。
另请注意,“数组是否为空”在 C 中不是一个非常有意义的概念。数组就在那里,它总是包含表示它声明的元素所需的任何位数。这些位可能没有有意义的值,但始终存在。
于 2011-11-26T23:50:10.720 回答
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、linkedlist、HashSets等的库会更好。对于CI,为此使用了很多Glib函数。
于 2011-11-27T00:59:17.060 回答