Я уверен, что неправильно использую синтаксис указателя внутри своей функции insertTowns, потому что, когда я пытаюсь запустить мой файл, я просто получаю ошибку сегментации, когда я раскомментирую строки, содержащие указатели в этой функции.Я знаю, что у меня есть правильно настроенная функция, но не синтаксически.Что я делаю неправильно в синтаксисе моего указателя для insertTowns?
Для простоты предположим, что нет ничего плохого в FILE * infile, и массивы были правильно распределены по malloc в отдельном файле.Кроме того, длина инициализируется равной 0, а затем передается в функцию readFile из main в другом файле .c.Так что это не проблема «без границ».
Я посмотрел множество видео на YouTube по указателям (тогда у weewboston было несколько хороших видео), посмотрел http://cslibrary.stanford.edu/106/ и несколько других ресурсов.
Ниже приведен фрагмент моего кода, а не вся программа для простоты, поскольку это просто проблема синтаксиса:
typedef struct cityStruct { unsigned int zip; char * town; } city;
typedef struct zipTownsStruct {
int * zips; // indexs to main array cities sorted by zip
city * * towns; // pointers to main array cities sorted by town name
city * cities; // main array of cities in order from file not sorted
} zipTowns;
extern void insertTowns(zipTowns arrs, int * length) {
int j = (*length) - 1;
while (j >= 0 && ((strcmp(arrs.towns[j]->town, arrs.cities[*length].town)) > 0)) {
*arrs.towns[j + 1] = *arrs.towns[j];
j--;
}
*arrs.towns[j + 1] = arrs.cities[*length];
}
extern void readFile(zipTowns arrs, FILE * infile, int * length) {
char * zipCode;
char * town;
if((zipCode = malloc(sizeof(char) * 6)) == NULL) {
fprintf(stderr, "%s\n", strerror(errno));
exit(errno);
}
if((town = malloc(sizeof(char) * 26)) == NULL) {
fprintf(stderr, "%s\n", strerror(errno));
exit(errno);
}
while(fscanf(infile,"%s %s", zipCode, town) == 2) {
arrs.cities[*length].zip = atoi(zipCode);
arrs.cities[*length].town = town;
insertZips(arrs, length);
insertTowns(arrs, length);
(*length)++;
}
free(zipCode);
free(town);
}