String NULL-char-Pointer zuweisen



  • Hallo Community,

    ich habe in meinem Programm die Funktion getopt eingebaut, um zu prüfen, welche Parameter angegeben worden sind.
    Jetzt habe ich aber ein Problem. Das Programm läuft nämlich nicht weiter, wenn nicht alle Parameter eingegeben wurden.

    Ich zeigs einfach mal im Code:

    int c;
    	while((c = getopt (argc, argv, "e:s:")) != -1) {
    		cout << c << endl;
    		switch(c) {
    		case 's' :
    			svalue=optarg;
    			break;
    		case 'e':
    			evalue=optarg;
    			break;
    		case '?':
    		default:
    			break;
    		}
           }
    
    /* Hier geht das Programm normal weiter */
    

    Wenn ich das Programm nun mit dem Parameter -s und einem Argument starte, gibt er mir 155 aus für das 's', macht dann aber nicht weiter. Gebe ich als Parameter -s und -e an, werden auch alle anderen Kommandos danach ausgeführt. Das heißt, das Programm steckt irgendwie fest.

    Edit:

    Am Ende der Schleife habe ich noch eine Stringzuweisung gemacht, das heißt:

    sval=svalue;
    eval=evalue;
    

    Wobei sval und eval Strings sind. Da hört das Programm auf. Also Ausgaben danach werden nicht mehr ausgegeben. Ich denke, es liegt daran, dass ein NULL-Zeiger nicht einem String zugewiesen werden kann, richtig?

    Wie kann ich das denn nun umgehen? Kann ich nicht direkt Strings verwenden, statt erst auf char* zu speichern, um danach diese char-Pointer zu Strings zu machen?

    Das ist jetzt gar nicht mehr das ursprüngliche Problem, deshalb ändere ich den Titel mal um...

    svalue und evalue sind übrigens char-Pointer.

    Kann mir da jemand helfen? Was braucht ihr noch?



  • http://www.linuxinfor.com/german/man3/getopt.html

    da findest bestimmt was du suchst



  • Du hast uns also den Code gegeben der das Problem deiner Meinung nach noch nicht verursacht. Den Code, wo das Problem stecken könnte, hast du uns verschwiegen. Da kann man dir dann auch nciht gut weiterhelfen. Reduzier das Programm mal auf das wesentliche, d.h. nimm alles raus, was mit dem problem nichts zu tun hat und poste uns den Code, der übrig bleibt.



  • Also läßt sich das problem reduzieren auf

    char const* svalue=NULL;
    std::string sval;
    sval=svalue;
    

    ?



  • volkard schrieb:

    Also läßt sich das problem reduzieren auf

    char const* svalue=NULL;
    std::string sval;
    sval=svalue;
    

    ?

    svalue ist ja auch nur ein zeiger, also an der stelle musste dir wirklich was anders überlegen



  • Autobahnn schrieb:

    svalue ist ja auch nur ein zeiger, also an der stelle musste dir wirklich was anders überlegen

    Wieso sollte er? So wies da steht passt es doch.



  • Hol dir die Parameter doch einfach über nen vector: http://ideone.com/wgcf6



  • Hallo,

    als ich den Text oben schrieb, dachte ich, das Problem läg in der Schleife, also an dieser Methode getopt(). Später hat sich dann herausgestellt, dass es nicht an dieser Schleife liegt, sonder an der Zuweisung vom char* an einen String.

    Das Problem habe ich jetzt soweit gelöst, dass der Zeiger vorher mit 0 initialisiert wird. Und sofern der Zeiger immernoch 0 ist ( => es wurde kein passendes Argument angegeben ), wird der String nicht verändert, ansonsten bekommt er den Wert des char*.

    Habe bisher damit keine Problem damit. Könnte es denn dabei irgendwie welche geben?

    Die Strings sind vorher mit "" definiert.



  • Ich empfehle dir immer noch, hier die STL zu verwenden, da das wesentlich einfacher zu verarbeiten ist. boost::program_options wäre auch noch eine Möglichkeit.


Anmelden zum Antworten