Initialisierung eines char-Arrays innerhalb einer Struktur



  • Hallo zusammen,

    leider hat mich die Suche im Web und hier im Forum noch nicht weiter gebracht.

    Ich habe ein Problem mit der Initialisierung eines char-Arrays innerhalb einer Struktur.

    Folgende Situation:

    Im Headerfile steht dies:

    typedef struct
    {
        char id[MAX_ID_LENGTH + 1];
        PipeComStruct inputPipe;
        PipeComStruct outputPipe;
        TCHAR *returnValueBuffer;
        BOOL valid;
    } structVar, *LPstructVar;
    
    extern structVar structVariable;
    

    Im Sourcefile steht dies:

    structVar structVariable = { {"-1"}, { {0} }, { {0} }, NULL, FALSE };
    

    Der GCC compiliert dies anstandslos. Allerdings steht beim ersten Zugriff auf id dort immer irgend ein Wert drin (als String ausgegeben ist es ein Leerstring, als Zahl ausgegeben eine relative große Zahl, z.B. 1638641712)!

    Keine Ahnung, was hier schief läuft! Schaffe es nicht, dass Array id mit -1 zu initialisieren! Hatte auch schon Folgendes versucht:

    structVar structVariable = { {'-', '1', '\0'}, { {0} }, { {0} }, NULL, FALSE };
    

    und auch andere Varianten!

    Wo liegt denn hier der (Denk-)Fehler?

    Könnte ich mich denn wenigstens darauf verlassen, dass das Array immer NULL-Bytes ('\0') initialisiert ist?

    Dank euch schon mal!

    Ciao



  • Hallo,

    der Fehler muß woanders liegen. Teste mal diesen Code:

    #include <stdio.h>
    
    typedef struct 
    {
    	char	test1[20];
    	char	*test2;
    } test;
    
    int main( void )
    {
    	test tVar = { "hello", "world" };
    
    	printf( "%s %s", tVar.test1, tVar.test2 );
    
    	return 0;
    }
    

    mfg Martin



  • Schreibt hello world raus!

    Hm, dann versteh ich es nicht! Liegt das am "extern" im Header?



  • Probiers mal mit static.



  • hmmmmm schrieb:

    Probiers mal mit static.

    Meinst Du hierbei:

    extern structVar structVariable;
    

    ?

    Also:

    extern static structVar structVariable;
    

    ?



  • Reth schrieb:

    extern static structVar structVariable;
    

    Klappt nicht!

    Ist das eigentlich "normal", dass das Array immer leer initialisiert ist (also mit NULL-Byte als erstes Zeichen)? Oder ist das Zufall?



  • Hallo Reth,

    Ist das eigentlich "normal", dass das Array immer leer initialisiert ist (also mit NULL-Byte als erstes Zeichen)? Oder ist das Zufall?

    Jain.

    Es kommt darauf an wo das array liegt:

    statisch: NULL
    stack: undefiniert
    heap: undefiniert

    Structs initialisiere ich oft manuell erst mal mit null bytes

    memset (&structVariable, 0, sizeof structVariable);
    und setzte dann nur das was anders als NULL ist.

    Wenn es auf Performance ankommt,
    versuche ich die Structs jedoch direkt richtig zu initialisieren.
    Bei Structs in Structs ist das schwieriger, kann sich aber 'lohnen'.

    Gruß Frank



  • Hi Frank,

    Frank Erdorf schrieb:

    Es kommt darauf an wo das array liegt:

    statisch: NULL
    stack: undefiniert
    heap: undefiniert

    Dann ist es wohl entweder Zufall, dass NULL drin steht, oder der Compiler legt die struct von mir (s.o.) statisch an, da sie mit extern deklariert wurde.
    Wie bekomme ich denn noch ein static an meine externe Struktur? Bisher hat nix geklappt!

    Frank Erdorf schrieb:

    Structs initialisiere ich oft manuell erst mal mit null bytes

    memset (&structVariable, 0, sizeof structVariable);
    und setzte dann nur das was anders als NULL ist.

    Wenn es auf Performance ankommt,
    versuche ich die Structs jedoch direkt richtig zu initialisieren.
    Bei Structs in Structs ist das schwieriger, kann sich aber 'lohnen'.

    Und genau dieser Fall (structs in structs) klappt bei mir nicht, statt des initialisierten Wertes steht ein NULL-Byte im char-Array! Und ich hab noch keine Ahnung wieso!

    Das Ganze ist Teil einer DLL und ich habe noch keinen Weg gefunden, das "live" zu debuggen (arbeite mit Eclipse Ganymede und GCC + MinGW).



  • Und genau dieser Fall (structs in structs) klappt bei mir nicht, statt des initialisierten Wertes steht ein NULL-Byte im char-Array! Und ich hab noch keine Ahnung wieso!

    Glaube mir, der Fehler liegt bei dir.
    Der Compiler hat immer Recht.
    Packe doch mal alles zusammen in EINE C-Datei, dann wird die Analyse erstmal leichter.


Log in to reply