array, constant expression error !!!! <--- GELÖST



  • wie kann ich zb einen array eine nicht constante länge zuweisen:

    weil ich hab folgendes problem

    brauche länge eines LPCWSTR als wert, als die vorbestimmte länge eines array's:

    also,sizeof(StringToOutput) bring hier garnix ausser den wert 2, der aber nicht die länge des Strings wiedergibt und _tcslen(StringToOutput) in dem array geht auch nicht also dieses: char wColors[_tcslen(StringToOutput)];
    wie kann ich den array char wColors[] so gross machen wie eben der String StringToOutput ist?

    int WriteToConsole(LPCWSTR StringToOutput, int Color,COORD aTC){
    	char wColors[sizeof(StringToOutput)];	memset(wColors,Color,sizeof(StringToOutput)); 
    	WriteConsoleOutputCharacter(hNewScreenBuffer,StringToOutput,_tcslen(StringToOutput),aTC,NULL);
    	WriteConsoleOutputAttribute(hNewScreenBuffer,(const WORD*)wColors,sizeof(StringToOutput),aTC,NULL);
    	return true;
    }
    


  • Du kannst dynamische Arrays nehmen. Ich empfehle std::vector . Eine Einführung findest du hier, auf www.cplusplus.com kannst du einzelne Funktionen nachschlagen.

    Übrigens, der sizeof -Operator wird immer zur Kompilierzeit ausgewertet und bezieht sich auf den Typ der Deklaration. sizeof(StringToOutput) ist also sizeof(LPCWSTR) , was der Grösse eines Zeigers auf deinem System entspricht.



  • array, dynamische grössen in laufzeit zuorden so gehsts:

    int myFunctions(int len){char *wColors=new char[len]; return true;}
    


  • buntehaare schrieb:

    array, dynamische grössen in laufzeit zuorden so gehsts:

    int myFunctions(int len){char *wColors=new char[len]; return true;}
    

    Also diese Funktion ist so ziemlicher Mist.

    Du kannst natürlich ein dynamisches Array benutzen, dann aber auch wieder korrekt für die Freigabe sorgen!

    Aber so wie die Funktion da steht macht die nichts nützliches ausser du willst deinen Speicher aufbrauchen.



  • Nein, so geht das nicht. Du musst den Speicher nach Benutzung wieder freigeben, sonst hast du ein Leck. Am sinnvollsten macht man das idR mit std::vector, wie Nexus richtig bemerkt.



  • drakon schrieb:

    buntehaare schrieb:

    array, dynamische grössen in laufzeit zuorden so gehsts:

    int myFunctions(int len){char *wColors=new char[len]; return true;}
    

    Also diese Funktion ist so ziemlicher Mist.

    Du kannst natürlich ein dynamisches Array benutzen, dann aber auch wieder korrekt für die Freigabe sorgen!

    Aber so wie die Funktion da steht macht die nichts nützliches ausser du willst deinen Speicher aufbrauchen.

    na ist schon klar das die funktion nix bringt war ja nur zur veranschaulichung der dynamischen grössenzuordnung des array's gedacht!

    naja kann ich mit delete den array-speicher wieder freigeben? oder gibts ne andere methode?



  • buntehaare schrieb:

    na ist schon klar das die funktion nix bringt

    Dann schreib doch eine sinnvolle Funktion oder gar nichts hin, sonst stiftest du nur Verwirrung und machst den Eindruck, als hättest du grundlegendste Prinzipien nicht verstanden.

    buntehaare schrieb:

    naja kann ich mit delete den array-speicher wieder freigeben? oder gibts ne andere methode?

    Ja, die gibts. Aber dafür müsstest du vielleicht meinen oberen Post lesen.


Anmelden zum Antworten