#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct {
long int ID;
short int semester;
char * abschluss;
} student;
void ausgabe(student * pers) {
printf("Person1.ID: %d\n ", pers->ID);
printf("Person1.Semester: %d\n ", pers->semester);
printf("Person1.Abschluss: %s\n ", pers->abschluss);
}
int main() {
student person1;
person1.ID=10007741;
person1.semester=0;
person1.abschluss = "hallo123";
ausgabe(&person1);
char * abneu = (char*)calloc(strlen(person1.abschluss)+4, sizeof(char));
strncat(abneu, person1.abschluss, strlen(person1.abschluss));
strncat(abneu, "456", 3);
person1.abschluss = abneu;
ausgabe(&person1);
return 0;
}
Änderungen:
1. Mit typedef wird das Struct zu einem Typen und du brauchst nicht jedes mal struct beim Deklarieren davor schreiben.
2. Ich schreib in Source immer alles klein, bis auf Makros, die komplett groß geschrieben werden - wird in den meisten Codes so gemacht für c.
3. Eingerückt
4. abschluss ist ein Pointer auf einen Char, so ist gar keine Länge vorgegeben und mehrere Studenten können den selben Abschlussstring bekommen, sodass man z.B. Vordiplom in Bachelor umbenennen könnte, ohne an jedem Studenten rumzuändern.
5. Die Ausgabe nimmt einen Pointer auf student, denn sonst wird der student jedes mal kopiert beim ausgeben.
6. Die Zuordnung mit Stringliteralen direkt auf Pointer ist kein Problem, das macht der Compiler - man darf die Teile dann nur nicht direkt reallocieren bei Größenänderungen, sondern muss es machen, wie oben gezeigt. Nur beim realloc aufpassen, da strlen(...) die abschließende NULL nicht berücksichtigt.
Dieser Beitrag wurde von Fenix bearbeitet: 04. März 2008 - 20:09

Hilfe
Neues Thema
Antworten
Nach oben






