C char Arrays

Abfluß

Grünschnabel
Bei dem folgenden Code brauche ich eure Hilfe:

Code:
#include <stdio.h>

void main ()

{

     struct Adresse { 

     int id; 
     char Buchstabe; 
     char Name[];
     }; 

     // Bei der Definition gleich initialisieren

     struct Adresse Angela = {27, 'j', "Angela"};

     printf("\n\n Angela.id = %d \n\n", Angela.id); 
     printf("\n\n Angela.Buchstabe = %c \n\n", Angela.Buchstabe);
     printf("\n\n Angela.Name = %s\n\n", Angela.Name);

}

FEHLERMELDUNGEN DES COMPILERS

newtest.c: In Funktion »main«:
newtest.c:16:13: Fehler: nicht-statischeq Initialisierung eines flexiblen Feldelements
newtest.c:16:13: Fehler: (nahe der Initialisierung für »Angela«)
 
Hi.

Man darf ein "flexibles Feldelement" nicht dynamisch initialisieren.

Du kannst es statisch machen:
C:
int main(void) { // main muss int zurückgeben!

   // Bei der Definition gleich initialisieren

  static struct Adresse Angela = {27, 'j', "Angela" };

   ...
}
Alternativ könnte man eine max. Arraygröße verwenden:
C:
#define NAME_MAX 15;

struct Adresse {
	int id;
	char Buchstabe;
	char Name[NAME_MAX];
};

oder man alloziert Speicher dynamisch:
C:
struct Adresse {
	int id;
	char Buchstabe;
	char* Name;
};

...

struct Addresse name;
name.id = 2;
name.buchstable = 'c';
name.Name = calloc(20);
strcpy(name.Name, "Angela");

...

free(name.Name);
 
@main und int: Muss einfach so sein, festgelegt im Standard.

@Semikolon: Ist falsch und sollte Compilerfehler erzeugen. Weg damit.
Präprozessoranweisungen (mit # vorne) haben das nicht allgemein,
zB. #include braucht auch keins.

edit: Sehe grad erst, du hast deepthorat darauf hingewiesen, es wegzutun...
habs umgekehrt verstanden.
 
main muss nicht wirklich int zurückgeben, wenn ich das richtig lese. Der C99-Standard schreibt diesbezüglich, dass es keine Regelung gibt, es wird jedoch vorgeschlagen ("shall", nicht "must") eine der beiden gängigen Versionen (int () oder int (int, char* [])) zu verwenden. Es steht jedoch drin "or in some other implementation-de?ned manner".

/Edit: Auf der nächsten Seite stehts noch expliziter:
"If the return type of the main function is a type compatible with int, a return from the
initial call to the main function is equivalent to calling the exit function with the value
returned by the main function as its argument;
10)
reaching the } that terminates the
main function returns a value of 0. If the return type is not compatible with int, the
termination status returned to the host environment is unspeci?ed."
 
Zuletzt bearbeitet:
Zurück