frankx: Anfängerfrage zu Strings in C

Beitrag lesen

Hellihello

Reine Geschmackssache, für den Compiler ergibt sich kein Unterschied.
Meine Variable heißt line und hat den Typ "Zeiger auf char". Sie ist nicht vom Datentyp char und heißt *line. Für *mich* ist meine Notation verständlicher und lesbarer.

Klingt logisch. Ist das auch irgendein Coding-Style?

merker = *inhalt;   // schreibe in merker das, auf was inhalt zeigt.

merker = *a, oder?

Dagegen hat die dynamische Speicherverwaltung den Nachteil, dass *nichts und niemand* Dir die Arbeit abnimmt, den von Dir angeforderten Speicher wieder freizugeben. Da kommt es gern einmal zu Speicherlecks, d.h. die Anwendung fordert immer wieder (meist kleine) Speichermengen an, die nicht mehr freigegeben werden, obwohl sie nicht mehr verwendet werden. Viel schlimmer, Du hast wahrscheinlich keinen Zeiger mehr auf diesen Speicher und kannst ihn daher auch nicht mehr freigeben. Das erfolgt erst mit Beendigung des Programmes.

Wäre hieran etwas falsch?

  
#include <stdio.h>  
  
// ist das schon eine globale variable oder nur eine definition?  
typedef struct data_type {  
 int age;  
 char name[20];  
} data;  
  
  
// soll zurückgeben eine structure typdefiniert mit dem alias "data"  
data *mymall()  
{  
 data *person;  
        //was macht das (data*) davor? ein typehinting? warum das sternchen plötzlich dahinter?  
 person = (data*) malloc( sizeof(data) );  
 if (person !=NULL ) {  
  person->age = 122;  
  strcpy ( person->name, "Somename");  
 }  
        // nicht *person (ist ja kein array) aber auch nicht &person  
 return person;  
}  
  
int main(int argc, int *argv)  
{  
 data *clone_person;  
  
 clone_person = mymall();  
        //wenn er jetzt die daten aus mymall zurückgibt - was "er" tut - , dann ist der test gelungen?  
 if (clone_person !=NULL ) {  
  printf ("%s is %d years old\n", clone_person->name, clone_person->age);  
 }  
        // versuch, den speicher freizugeben, da es ja ein pointer auf eine adresse ist, dürfte clone_person ja auf den selben speicherbereich zeigen wie das returnte "person", oder?  
 free(clone_person);  
}  

Dank und Gruß,

frankx

--
tryin to multitain  - Globus = Planet != Welt