user-0 提问: 从txt文本中读入一组整型数据，将其存入数组中

回复:
user: user-1
content: 建议返回size_t（无符号int），表示读取的数组元素个数，如果需要获取动态数组，可以设置一个int** pNum形参，在函数内部，先遍历一下获得元素个数iCount，然后文件指针重回头部，根据获得的个数动态分配int数组，比如*pNum = new int[iCount]，然后循环读取每一行并格式化为数组元素.最后返回iCount.调用结束后要根据返回的iCount是否大于0来决定是否释放形参pNum动态开辟的空间

user: user-2
content: #include <stdio.h> #include <stdlib.h>     /////////////////////////////////////////////////////////// typedef struct _array { 	int count; 	int* data; }array_t;  typedef enum _sort_order { 	SORT_ASC, //ascending order 	SORT_DESC //descending order }sort_order_t;  array_t* arr_create(void) { 	array_t* arr = NULL; 	arr = (array_t*)calloc(sizeof(array_t), 1); 	return arr; }  int arr_insert(array_t* arr, int value) { 	if (NULL == arr) 	{ 		return -1; 	} 	 	arr->count++; 	arr->data = (int*)realloc(arr->data, sizeof(int) * arr->count); 	if (NULL == arr->data) 	{ 		return -1; 	} 	 	arr->data[arr->count - 1] = value; 	return 0; }  static int arr_comp_asc(const void* data1, const void* data2) { 	return *(int*)data1 - *(int*)data2; }  static int arr_comp_desc(const void* data1, const void* data2) { 	return *(int*)data2 - *(int*)data1; }  void arr_sort(array_t* arr, sort_order_t order) { 	if (NULL == arr) 	{ 		printf("the array not exist.\n"); 		return; 	} 	 	if (0 == arr->count) 	{ 		printf("the array is empty.\n"); 		return; 	} 	 	if (1 == arr->count) 	{ 		return; 	} 	if (SORT_ASC == order) 	{ 		qsort(arr->data, arr->count, sizeof(int), arr_comp_asc); 	} 	else 	{ 		qsort(arr->data, arr->count, sizeof(int), arr_comp_desc);		 	}  }  void arr_show(array_t* arr) { 	int i = 0; 	 	if (NULL == arr) 	{ 		printf("the array not exist.\n"); 		return; 	} 	 	if (0 == arr->count) 	{ 		printf("the array is empty.\n"); 		return; 	} 	 	printf("the array have %d elements, as follows:\n", arr->count); 	for (i = 0; i < arr->count; i++) 	{ 		printf("%5d ", arr->data[i]); 		if (0 == ((i + 1) % 5)) 		{ 			printf("\n"); 		} 	} 	printf("\n");	 } void arr_destory(array_t *arr) { 	if (arr != NULL) 	{ 		if (arr->data != NULL) 		{ 			free(arr->data); 			arr->data = NULL; 		} 		arr->count = 0; 		free(arr); 	} } ///////////////////////////////////////////////////////////  array_t* myread(const char *filepath, array_t* arr) {  	FILE *fp; 	int value; 	 	if ((NULL == filepath) || (NULL == arr)) 	{ 		printf("invalid parameter for function %s.\n", __func__); 		return NULL; 	} 	 	fp = fopen(filepath, "r"); 	if (NULL == fp) 	{ 		printf("the file %s is not exist.\n", filepath); 		return NULL; 	} 	 	while (!feof(fp)) 	{  		if (fscanf(fp,"%d", &value) != 0) 		{//skip the empty line 			arr_insert(arr, value); 		} 	}       	fclose(fp);  	return arr; }    int main(void) {      const char *PATH="data.txt";      array_t* arr;           arr = arr_create(); 	if (NULL == arr) 	{ 		printf("memory exhausted.\n"); 		return NULL; 	} 	      //read data from file      arr = myread(PATH, arr);      if (NULL == arr)      {      	return -1; 	 } 	       //print data 	arr_show(arr); 	 	//sort by ascending order 	arr_sort(arr, SORT_ASC); 	arr_show(arr); 	//sort by descending order	 	arr_sort(arr, SORT_DESC); 	arr_show(arr);	 	 	//free the memory 	arr_destory(arr); 	return 0; }

user: user-0
content: 引用 2 楼 fly_dragon_fly 的回复:void 没有返回, 最好改成int, 代表返回的个数 改为int的话，返回数组该怎样操作？

user: user-3
content: void 没有返回, 最好改成int, 代表返回的个数

user: user-0
content: 顶起来，期待能给我指点迷津

user: user-0
content: 感谢版主starytx的解答，这是最接近我原来想法的解决方案，而且更简洁、明了

user: user-1
content: 引用 9 楼 starytx 的回复:// 读取文件filename中的数字到数组pNum中，返回读取到的数字个数 size_t readNum(const char* filename ,int **pNum) { 	FILE *fp = fopen( filename ,"r");  	size_t iCount = 0; 	if (fp != NULL) 	{ 		char str[10] = {0};   // 假设每个数字不超过9位（不包括结束符） 		while (fgets(str, 9, fp) != NULL) 		{  			iCount++; 		} 		rewind(fp);    // 重置指针到文件头 		if (iCount > 0) 		{ 			*pNum = new int[iCount]; 			if (*pNum) 			{ 				int i = 0; 				while (fgets( str, 9, fp )) 				{ 					(*pNum)[i++] = atoi(str); 				} 			} 		} 		fclose(fp); 	} 	return iCount; }  // 测试调用代码示例 	int *p = NULL; 	size_t n = fun("test.txt" ,&p); 	if (n > 0 )       // 此处也可以判断p是否为NULL 	{ 		for (int i = 0; i != n; i++) 		{ 			printf("%d\n" ,p[i]); 		} 		delete []p;		// 一定要记得释放 		p = NULL; 	}应该是调用readNum，不是fun

user: user-1
content: // 读取文件filename中的数字到数组pNum中，返回读取到的数字个数 size_t readNum(const char* filename ,int **pNum) { 	FILE *fp = fopen( filename ,"r");  	size_t iCount = 0; 	if (fp != NULL) 	{ 		char str[10] = {0};   // 假设每个数字不超过9位（不包括结束符） 		while (fgets(str, 9, fp) != NULL) 		{  			iCount++; 		} 		rewind(fp);    // 重置指针到文件头 		if (iCount > 0) 		{ 			*pNum = new int[iCount]; 			if (*pNum) 			{ 				int i = 0; 				while (fgets( str, 9, fp )) 				{ 					(*pNum)[i++] = atoi(str); 				} 			} 		} 		fclose(fp); 	} 	return iCount; }  // 测试调用代码示例 	int *p = NULL; 	size_t n = fun("test.txt" ,&p); 	if (n > 0 )       // 此处也可以判断p是否为NULL 	{ 		for (int i = 0; i != n; i++) 		{ 			printf("%d\n" ,p[i]); 		} 		delete []p;		// 一定要记得释放 		p = NULL; 	}

user: user-4
content: http://bbs.csdn.net/topics/360055953

user: user-0
content: 引用 4 楼 lgbxyz 的回复: #include <stdio.h> #include <stdlib.h>     /////////////////////////////////////////////////////////// typedef struct _array { 	int count; 	int* data; }array_t;  typedef enum _sort_order { 	SORT_ASC, //ascending order 	SORT_DESC //descending order }sort_order_t;  array_t* arr_create(void) { 	array_t* arr = NULL; 	arr = (array_t*)calloc(sizeof(array_t), 1); 	return arr; }  int arr_insert(array_t* arr, int value) { 	if (NULL == arr) 	{ 		return -1; 	} 	 	arr->count++; 	arr->data = (int*)realloc(arr->data, sizeof(int) * arr->count); 	if (NULL == arr->data) 	{ 		return -1; 	} 	 	arr->data[arr->count - 1] = value; 	return 0; }  static int arr_comp_asc(const void* data1, const void* data2) { 	return *(int*)data1 - *(int*)data2; }  static int arr_comp_desc(const void* data1, const void* data2) { 	return *(int*)data2 - *(int*)data1; }  void arr_sort(array_t* arr, sort_order_t order) { 	if (NULL == arr) 	{ 		printf("the array not exist.\n"); 		return; 	} 	 	if (0 == arr->count) 	{ 		printf("the array is empty.\n"); 		return; 	} 	 	if (1 == arr->count) 	{ 		return; 	} 	if (SORT_ASC == order) 	{ 		qsort(arr->data, arr->count, sizeof(int), arr_comp_asc); 	} 	else 	{ 		qsort(arr->data, arr->count, sizeof(int), arr_comp_desc);		 	}  }  void arr_show(array_t* arr) { 	int i = 0; 	 	if (NULL == arr) 	{ 		printf("the array not exist.\n"); 		return; 	} 	 	if (0 == arr->count) 	{ 		printf("the array is empty.\n"); 		return; 	} 	 	printf("the array have %d elements, as follows:\n", arr->count); 	for (i = 0; i < arr->count; i++) 	{ 		printf("%5d ", arr->data[i]); 		if (0 == ((i + 1) % 5)) 		{ 			printf("\n"); 		} 	} 	printf("\n");	 } void arr_destory(array_t *arr) { 	if (arr != NULL) 	{ 		if (arr->data != NULL) 		{ 			free(arr->data); 			arr->data = NULL; 		} 		arr->count = 0; 		free(arr); 	} } ///////////////////////////////////////////////////////////  array_t* myread(const char *filepath, array_t* arr) {  	FILE *fp; 	int value; 	 	if ((NULL == filepath) || (NULL == arr)) 	{ 		printf("invalid parameter for function %s.\n", __func__); 		return NULL; 	} 	 	fp = fopen(filepath, "r"); 	if (NULL == fp) 	{ 		printf("the file %s is not exist.\n", filepath); 		return NULL; 	} 	 	while (!feof(fp)) 	{  		if (fscanf(fp,"%d", &value) != 0) 		{//skip the empty line 			arr_insert(arr, value); 		} 	}       	fclose(fp);  	return arr; }    int main(void) {      const char *PATH="data.txt";      array_t* arr;           arr = arr_create(); 	if (NULL == arr) 	{ 		printf("memory exhausted.\n"); 		return NULL; 	} 	      //read data from file      arr = myread(PATH, arr);      if (NULL == arr)      {      	return -1; 	 } 	       //print data 	arr_show(arr); 	 	//sort by ascending order 	arr_sort(arr, SORT_ASC); 	arr_show(arr); 	//sort by descending order	 	arr_sort(arr, SORT_DESC); 	arr_show(arr);	 	 	//free the memory 	arr_destory(arr); 	return 0; } 好全面啊 不过要不要这么麻烦？

user: user-0
content: 引用 5 楼 starytx 的回复:建议返回size_t（无符号int），表示读取的数组元素个数，如果需要获取动态数组，可以设置一个int** pNum形参，在函数内部，先遍历一下获得元素个数iCount，然后文件指针重回头部，根据获得的个数动态分配int数组，比如*pNum = new int[iCount]，然后循环读取每一行并格式化为数组元素.最后返回iCount.调用结束后要根据返回的iCount是否大于0来决定是否释放形参pNum动态开辟的空间 怎样返回 size_t，还请明示.....