einfacher avra Programmfehler



  • Hallo,

    ich wollte eigentlich nur (da ich noch ein blutiger Anfänger bin) in C++ ein Programm schreiben, bei dem man einen Pfad eingeben muss. Danach assembliert das Programm avra.exe (avra in cmd) die Assemblerdatei.

    Mein Compiler meckert aber und gibt folgende Fehlermeldung aus:

    TEST.cpp: In function 'INT32 main()':
    TEST.cpp:37:23: error: cannot convert 'STR32 {aka std::basic_string<char>}' to 'const char
    ' for argument '1' to 'int system(const char*)'*

    Hier nun der C++ - Code (kompiliert mit g++.exe von MinGW32):

    #include <iostream>
    #include <math.h>
    #include <stdlib.h>
    #include <windows.h>
    using namespace std;
    
    typedef signed short INT16;		// 16 Bit
    typedef signed int INT32;		// 32 Bit
    typedef signed long long int INT64;	// 64 Bit
    typedef string STR32;		        // 32 Bit
    
    struct data {
    	STR32 eingabe0;
    	STR32 ausgabe0;
    } data;
    
    void sleep (INT32 msec) {
    	Sleep (msec);
    };
    void cclear () {
    	system ("cls");
    };
    void cpause () {
    	system ("pause > NUL");
    };
    INT32 main () {
    	cout << "Geben Sie den Pfad zu der .asm-Datei in Anfuehrungszeichen an:";
    	cout << endl;
    	cin >> data.eingabe0;
    	if ((data.eingabe0 == "q")) {
    		exit (0);
    	};
    	data.ausgabe0 = "avra -o \"main.hex\" --includepath \"C:\\avra\\includes\" \"" + data.eingabe0 + "\"";
    	system (data.ausgabe0);
    	cout << endl;
    	cout << endl;
    	cpause ();
    	return 0;
    };
    


  • der befehl

    system()
    

    kann nur etwas mit c-strings anfangen.
    du kannst aber normale strings in c-strings konvertieren, so sollte das programm funktionieren.

    system(data.ausgabe0.c_str())
    


  • So wie es aussieht programmierst du unter Windows, also empfehle ich dir ShellExecute anstelle system zu verwenden.



  • system(data.ausgabe0.c_str())
    

    funktioniert. Da ich aber noch ein Anfänger bin, muss ich fragen, was der Unterschied zwischen

    string
    

    und

    c.str()
    

    ist.

    Danke nochmal!

    Seikuassi



  • Ich weiß, ich könnte es nachlesen, aber wie würde der Programmaufruf mit ShellExecute aussehen?

    Danke im Voraus!

    Seikuassi



  • Strings werden in C und C++ gespeichert, indem man einfach einen Pointer auf den ersten Buchstaben speichert.
    Anhand dieses Pointers kann man solange den String durchsuchen, bis ein 0 Character auftaucht (keine '0' sondern wirklich 0) oder alternativ die Stringlänge in einer anderen Variable speichern.
    Viele Funktionen benötigen String-Parameter in dieser Form.

    Mit pointern arbeiten kann aber oft ziemlich eklig sein, denn es reicht nicht nur den Pointer zu kopieren, sondern man muss auch den String, auf den er zeigt kopieren.

    std::string ist eine Klasse, die diesen ganzen Kram selbsständig macht, und deswegen viel übersichtlicher, einfacher und weniger fehleranfälliger ist.

    Mit .c_str() kann man aber auf den Pointer zugreifen, wenn man ihn doch mal benötigt.

    ShellExecute(NULL, NULL, datei, parameter, NULL, SW_SHOWDEFAULT);
    

Log in to reply