Nochmal main() Parameter!!



  • Ich habe noch mal ein Problem!
    Ich habe zwei Codes, der eine geht der andere nicht!
    Und zwar:
    Die veränderung der Übergabeparameter der main() funktioniert:

    int main(int argc, char **argv)
    {
    	int i;
    
    	for(i=0;i<argc;i++)
    	{
    		gets(argv[i]);
    		printf("%d:%s\n",i,argv[i]);
    	}
    
    	main1(argc,argv);
    return 0;
    
    }
    

    Also wenn ich hier Parameter angebe kann ich sie auch ändern!

    Und nun wollte ich die Parameter der main() selber initialisieren:

    int main()
    {
    	int i;
    	int argc;
    
    	char **argv;
    
    	cout << "Hallo\n";
             cin >> argc;
    	//(arge=(char **) malloc(argc*sizeof(char))) != NULL;
    	(argv=new char *[argc])!=NULL;
    
    	for(i=0;i<argc;i++)
    	{
    		gets(argv[i]);
    		printf("%d:%s\n",i,argv[i]);
    	}
    
    	main1(argc,argv); //Übergabe an die Hauptfunktion
    return 0;
    
    }
    

    und dabei gibt es beim Debuggen immer einen Fehler beim einlesen des Strings.
    Die Variablen bzw Zeiger sind doch aber genau die selben, wie in der main() und trotzdem geht es nicht
    Bitte um Antwort...
    Gruß





  • Was soll denn das?



  • ...



  • Ich hätte ja wenigstens mal gewußt, ob das überhaupt geht und ob diese Parameter etwas besonderes sind. Das steht so nähmlich nirgends!

    P.S.: Ich habe drei Bücher und bestimmt 5 pdf's über c und c++

    Ich würde gerne mal den grundlegenden Fehler wissen wollen, weil ich mich, glaube ich, bloß sinnlos verrenne



  • Dein erster Fehler ist, dass du C UND C++ mischst. Was willst du lernen, C oder C++?.

    Ich denke mal C++ :).
    Dann benutze auch konsequent die C++-Stream-Klassen (cin und cout). Prinzipiell ist sowas was du da machst schon möglich, jedoch machst du dir das Leben so (imho) unnötig schwer. Benutze statt char* Arrays die Klasse std::string.

    Ansonsten ein (hoffentlich hilfreicher) Ansatz mit char*-Arrays: (Ungetestet)

    #include <iostream>
    using namespace std;
    
    int main()
    {
        cout << "Bitte Anzahl der Strings eingeben: ";
        unsigned int argc;
        cin >> argc;
        cin.get();
        char** argv = new char*[argc]; // Ein char*-Array dynamisch anlegen
        for(unsigned int i = 0; i < argc; ++i)
        {
            argv[i] = new char[100];
            cin.getline(argv[i], 99);
            cout << "\n argv[" << i << "]: " << argv[i] << endl;
        }
    
        //main1(argc,argv); //Übergabe an die Hauptfunktion
    
        for(unsigned int i = 0; i < argc; ++i)
            delete[] argv[i];
        delete[] argv; // Speicher wieder freigeben. Nicht (wie ich so oft) vergessen!
        return 0;
    }
    

    Aber wie gesagt, einfacher, sicherer und komfortabler gehts mit std::string:
    Beispiel:

    int main()
    {
        cout << "Bitte Anzahl der Strings eingeben: ";
        unsigned int argc;
        cin >> argc;
        cin.get();
        string argv = new string[argc]; // Ein std::string-Array dynamisch anlegen
        for(unsigned int i = 0; i < argc; ++i)
        {
            getline(cin, argv[i]);
            cout << "\n argv[" << i << "]: " << argv[i] << endl;
        }
    
        //main1(argc,argv); //Übergabe an die Hauptfunktion
    
        delete[] argv;
        return 0;
    }
    

    /edit: 🙂

    Caipi



  • Danke für die Antwort. Das wird mir auf alle Fälle weiterhelfen.

    P.S.: Der Hauptcode des Programms ist leider in c geschrieben und deshalb auch diese umständliche verknüpfung mit main1(argc,argv)

    Prizipiell muß ich eine grafische Windowsoberfläche schreiben und deshalb die Verknüpfung zu c mit c++


Anmelden zum Antworten