Δημοσιεύτηκε: 15 Ιουν 2012, 15:47
από stamatiou
Έφτιαξα το πρώτο μου επίσημο project σε C! https://github.com/giwrg98/Comic-Organiser.git
Επίσης τώρα προσπαθώ να φτιάξω ένα πρόγραμμα όπου κάποιος θα μπορεί να έχει κάτι σαν τράπεζα και να φτιάχνει λογιαριασμούς κλπ. Αλλά για κάποιο λόγο μου βγάζει seg fault.
trapeza.h:
Spoiler: show
Κώδικας: Επιλογή όλων
#ifndef TRAPEZA_H

#define TRAPEZA_H

#define MAXNAME (120 + 1)
#define COMPARE_STR(STR1, STR2) (strcmp(lowercase_str(STR1), lowercase_str(STR2)))

int initialize(void);
int add_person(char *name, char *surname);
int print_person(char *query);
int give_money(int money);
int sub_money(int money);
char *lowercase_str(char *str);

typedef struct person {
char name[MAXNAME];
char surname[MAXNAME];
int money;
}Person;

#endif

trapeza.c:
Spoiler: show
Κώδικας: Επιλογή όλων
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

#include "trapeza.h"

Person *array;
FILE *fp;
unsigned int person_count;

int add_person(char *name, char *surname) {
Person new_person;
fp = fopen("in.dat", "a+b");
strcpy(new_person.name, name);
strcpy(new_person.surname, surname);
new_person.money = 0;
fwrite(&new_person, sizeof(new_person), 1, fp);
rewind(fp);
fread(&person_count, sizeof(unsigned int), 1, fp);
person_count++;
rewind(fp);
fwrite(&person_count, sizeof(unsigned int), 1, fp);
array = (Person *) realloc(array, sizeof(array) + sizeof(new_person));
array[person_count - 1] = new_person;
fclose(fp);
return 0;
}

int initialize(void) {
fp = fopen("in.dat", "wb+");
person_count = 0;
fwrite(&person_count, sizeof(unsigned int), 1, fp);
fclose(fp);
return 0;
}

char *lowercase_str(char *str)
{
int i;
for(i = 0; str[i]; i++) {
str[i] = tolower(str[i]);
}
return str;
}

int search_person(char *query) {
int i;
for(i = 0; i < person_count; i++) {
if((COMPARE_STR(array[i].name, query) == 0) || (COMPARE_STR(array[i].surname, query) == 0))
return 1;
}
return 0;
}

int main(void) {
initialize();
add_person("Name", "Surname");
if(search_person("Surname")) {
printf("Success!\n");
}
return 0;
}

το σφάλμα είναι στη γραμμή 42 στη lowercase_str αν και την έχω ελέγξει και στο άλλο project :/