Problem mit Gültigkeitsbreich einer Variablen



  • Tach,
    ich will eine Char-Variable abhängig von einer Bedingung deklarieren, wobei die Länge durch die Länge eines anderen Strings bestimmt wird, beispielsweise so:

    [code]
    if(string1 != NULL)
     {
       char string2[strlen(string1)];
     }
    else
     {
       char string2[20];
     }
    

    Nur dann hab' ich ein Problem: Möchte ich danach auf die Variable zugreifen, so erkennt der Compiler nicht, dass ich die Variable abhängig von einer Bedingung deklariert habe und zeigt eine Fehlermeldung an, dass sie nicht deklariert sei. Wie kann ich auf die Variable zugreifen, ohne sie außerhalb der Bedingung zu deklarieren?
    Geht das, wenn ja wie? Ach ja, ich nutze den Icc Win32-Compiler.



  • Nein.
    Die Variable existiert nur in diesem Block! Du musst sie außerhalb definieren, um auch außerhalb auf sie zugreifen zu können. Es gibt keine Möglichkeit außerhalb darauf zuzugreifen.

    Ich weiß nicht wie das mit C aussieht, aber ich glaube folgendes müsste funktionieren:

    char *string2;
    if(string1 != NULL) 
     { 
       string2 = new char[strlen(string1)]; 
     } 
    else 
     { 
       string2 = new char[20]; 
     }
    

    Code-Hacker



  • Das selbe in C inclusive Fehlerhandling für malloc.

    char *string2; 
    int len=20; // Default Stringlänge wobei eine Länge unter 81 mich immer nervös macht.
                // hier passen jetzt 19 Zeichen rein weil man die \0 am Ende des Strings nicht vergessen darf.
    
    if(string1 != NULL)  
       len=strlen(string1);
    
    string2 = malloc(len)
       if (NULL==string2) // Fehlerhandling
        printf("Kann keinen Speicher allokieren\n");
    


  • a) sollte man lieber size_t anstelle int fuer groessen angaben benutzen, dass kann einem einige (Sicherheits) Probleme ersparen!

    b) sollte man Fehler wenn auf stderr schreiben am besten benutzt man fuer die Fehler Ausgabe bei Standard Funktionen die Funktion perror, weil gleich errno ausgewehrtet wird



  • Ok, danke...
    Dann werd' ich das wohl mit malloc machen müssen...



  • wenn dein Compiler C99 beherscht, brauchst du kein malloc, dann kannst du den Code auch so schreiben

    char *string1=NULL;
    size_t len=20;
    
    if(string1)
      len=strlen(string1);
    
    char string2[len];
    

Anmelden zum Antworten