Я пробовал malloc
, и не malloc
и он будет строить, но не запускаться и не компилироваться. Когда я запускаю код на codepad.org
он дает мне ошибку сегментации. У меня есть массив структур, которые я вводил, и я просматриваю их для определенного элемента. Это до тех пор, пока я не получил компиляцию. Код выглядит следующим образом (я использовал netbeans, кодовые блоки и визуальные базовые программы 2012 года):
#include #include #include #define SIZE 20 #define BLOODTYPESIZE 4 #define MAX 120000 typedef struct { int month; int day; int year; } dateT; typedef struct { int hour; int minute; } timeT; typedef struct { char name[SIZE]; char organname[SIZE]; char bloodtype[BLOODTYPESIZE]; dateT dateAdded; timeT timeAdded; int received; } organT; int main(void) { int i, n, k, j; int c; int *ptr; char organ[SIZE]; char bloodkind[BLOODTYPESIZE]; organT patient[MAX]; scanf("%d",&n); ptr = (int *)malloc(n * sizeof(*ptr)); printf("Enter patient information\n"); for(i=1; i<=n; i++){ scanf("%s", patient[i].name[SIZE]); scanf("%s", patient[i].organname[SIZE]); scanf("%s", patient[i].bloodtype[BLOODTYPESIZE]); scanf("%d %d %d", patient[i].dateAdded); scanf("%d %d", patient[i].timeAdded); patient[i].received = 0; } scanf("%d", &k); for(j=0; j<k; j++) { gets(organ); printf("Organ received: %s", organ); gets(bloodkind); printf("Organ has blood type: %s", bloodkind); } for (c=0; c<n; c++){ if(patient[i].organname == organ){ if(patient[i].bloodtype == bloodkind){ if(patient[i].received == 0) { printf("Patient(s) Found!\n"); printf("%s", patient[i].name[SIZE]); printf("Organ received: %s", organ); patient[i].received = 1; } if(patient[i].received == 1) printf("Patient already received organ\n"); } else("Not correct blood type\n"); } else("No match found\n"); } return (EXIT_SUCCESS); }
Похоже, что вы неправильно используете адрес. Например, когда вы говорите
scanf("%s", &patient[i].name[SIZE]);
вы фактически просматриваете выделенное пространство для patient[i].name
. Вы должны изменить заявление на
scanf("%s",patient[i].name);
и фиксировать другие утверждения аналогичным образом.
здесь вы bloodtype[BLOODTYPESIZE]
доступ к bloodtype[BLOODTYPESIZE]
но последним пунктом на этой вкладке является bloodtype[BLOODTYPESIZE-1]
scanf("%s", &patient[i].bloodtype[BLOODTYPESIZE]);
Та же проблема есть и для других аксессуаров в параграфе.