데이터를 읽는 함수를 사용하여 배열에 저장 한 다음 배열을 main()으로 반환하여 정렬 프로세스를 수행하려고 시도한 프로그램을 작성하려고했습니다. 여기에 내가 가진 무엇함수에서 반환 된 포인터에서 배열 내용을 액세스합니다.
#include <stdio.h>
#include <stdlib.h>
#define RESERVED_ARRAY_SIZE 100
int* read_data_from_files()
{
int* arr = (int*) malloc(sizeof(int) * 50);
int arr_count;
int status;
int i,j ;
arr_count =0;
i=0;
FILE *cfPtr;
if ((cfPtr = fopen ("score.dat", "r"))== NULL)
{
printf("File cannot be opend\n");
}
else
{
fscanf(cfPtr, "%d", &arr[i]);
printf("%5d%5d\n", i, arr[i]);
while (!feof (cfPtr))
{
++i;
++arr_count;
status = fscanf(cfPtr, "%d", &arr[i]);
if (status == EOF)
{
break;
}
else if (status != 1)
{
fprintf (stderr, "Error input\n");
getchar();
}
if (arr_count >= RESERVED_ARRAY_SIZE)
{
fprintf(stderr, " The number of array is over.\n");
getchar();
}
printf("%5d%5d\n", i, arr[i]);
}
fclose (cfPtr);
}
printf("arr_count=%d\n", arr_count);
return arr;
}
int main()
{
int i;
int arr_count;
int* arr = (int*) malloc(sizeof(int) * 10);
arr = read_data_from_files();
arr_count = sizeof(arr)/sizeof(arr[0]);
printf("this check the size of array%d", arr_count);
for (i=0; i<9; i++)
{
printf("%d ", i);
printf("%d", *arr[i]);
}
selection_sort(arr, arr_count);
getchar();
return 0;
}
내 질문 있습니다 1. 기능이 개 값을 반환 할 수없는 경우, I 메인에 funcution의 배열 크기 (내 프로그램에서 arr_count)을 통과하기 위해 무엇을 할 shuold()? 2. 함수가 배열 포인터를 main()으로 반환하는 경우 주 배열의 크기를 알아낼 수 있습니까? 나는 어떻게해야합니까? 비서를 위해 많이 필요합니다.
C 및 C++ 언어 나는 당신이 이전을 골랐다 고 믿습니다. –
함수에'i'와'arr_count'가 둘 다 필요하지 않습니다. 그들은 항상 같은 가치를 지니고 있습니다. 그리고 들여 쓰기는 코드를 정확하게 읽지 못하게합니다. 좋은 들여 쓰기 (특히 SO를위한 완벽한 탭)는 코드를 읽기 쉽게 만듭니다. –
배열에 50 개의 항목을 할당하지만 RESERVED_ARRAY_SIZE (별명 100)를 사용하여 오버플로를 테스트하는 것은 유감입니다. 오버플로에 대한 테스트를 수행합니다. 불행히도, 당신은 문제를 너무 늦게 발견합니다. 일관성은 프로그래밍에서 매우 중요합니다. RESERVED_ARRAY_SIZE를 (를) 지속적으로 사용하면 도움이됩니다. 이 심볼은 디버그 심볼 테이블에 포함될 것이기 때문에 ('print RESERVED_ARRAY_SIZE' 등을 할 수 있기 때문에) 디버깅을 위해서는'enum {RESERVED_ARRAY_SIZE = 100};을 사용하는 것이 더 좋을 것입니다. 그러나 매크로 값은 그렇지 않습니다. –