Woodstock Geschrieben 31. Oktober 2001 Geschrieben 31. Oktober 2001 Nun, es geht mir darum das ich den Inhalt von argv[2], argv[3], ..., argv[n] in einem Array speichern möchte. Nun ist meine Frage, wie? Einfach nur strcpy geht nicht. Bei dem Versuch: strcpy(Eingabe[scnt2], argv[y]); gibt er mir die Fehlermeldung 'strcpy' : cannot convert parameter 2 from 'char' to 'const char *'! Was muss ich ändern? Bine <FONT COLOR="#a62a2a" SIZE="1">[ 31. Oktober 2001 10:23: Beitrag 1 mal editiert, zuletzt von Woodstock ]</font> Zitieren
haddock Geschrieben 31. Oktober 2001 Geschrieben 31. Oktober 2001 <BLOCKQUOTE><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Zitat:</font><HR>Original erstellt von Woodstock: <STRONG>Nun, es geht mir darum das ich den Inhalt von argv[2], argv[3], ..., argv[n] in einem Array speichern möchte. Nun ist meine Frage, wie? Einfach nur strcpy geht nicht. Bei dem Versuch: strcpy(Eingabe[scnt2], argv1[y]); gibt er mir die Fehlermeldung 'strcpy' : cannot convert parameter 2 from 'char' to 'const char *'! Was muss ich ändern? Bine</STRONG> Zitieren
Klotzkopp Geschrieben 31. Oktober 2001 Geschrieben 31. Oktober 2001 Was ist argv1? Wenn das ein char-Array ist, dann muss der Index weg. <FONT COLOR="#a62a2a" SIZE="1">[ 31. Oktober 2001 10:13: Beitrag 1 mal editiert, zuletzt von Klotzkopp ]</font> Zitieren
Woodstock Geschrieben 31. Oktober 2001 Autor Geschrieben 31. Oktober 2001 @ Koltzkopp: Also, die 1 bei dem argv1[y] stammt noch aus einem Versuch, sorry, ist im Orginal schon vor meiner Frage wieder verändert worde, mache es gleich auch hier in meiner Frage. @captain haddock: Nee, habe ich nicht. Kann es an der Übergabe liegen? Warum ich das mache? Mein Chef meinte ich solle es besser machen, zur Sicherheit, damit ich nicht durch einen dummen Zufall eventuell etwas daran verändere. Und ich habe auch das Problem dass wenn ich argv[n], mit welchem Index auch immer direkt in der Überprüfung nehme, das er mir dann genau die gleiche Fehlermeldung gibt. Bine Zitieren
haddock Geschrieben 31. Oktober 2001 Geschrieben 31. Oktober 2001 Hmmmmmmmmmm, das wundert mich, daß dein Compiler argv[] als char bertrachtet, entweder Erstellen->alles neu erstellen oder suchen, ob irgendwo eine falsche Deklaration ist, ich wüßte nur nicht wo. Du hattest ja in main() (jedenfalls im letzten verfügbaren Post) char* argv[] deklariert. Welchen Typ hat denn Eingabe ? Das mit Sicherheit ist natürlich ein Argument. Anstelle des Kopiertheaters könntest du auch anders einen Schreibschutz auf argv setzen: const char** const myArgv = argv; Das ist jetzt C++ und kein C, wichtig! Das erste const macht die Daten Konstant, d.h. du darfst sie über myArgv nicht mehr ändern. Das zweite macht den Zeiger Konstant, d.h. du darfst ihn nicht auf eine andere Adresse umsetzen. Wenn du nun konsequent immer über myArgv zugreifst, gibt es keine "dummen Zufälle" mehr. Weiterhin jkannst du alle Parameter von Funktionen, die nicht verändert werden sollen/dürfen, const deklarieren. Dies ist ein Sicherheitsmechanismus, den man kennen und anwenden sollte. Zitieren
multimac Geschrieben 31. Oktober 2001 Geschrieben 31. Oktober 2001 Hey Woodstock, argv ist ein Array der Zeiger enthält, dementsprechend muss man ihn auch sorgfältig kopieren. Code kommt im neuen Beitrag - habe eine bessere Lösung gefunden. (alter Code gelöscht) <FONT COLOR="#a62a2a" SIZE="1">[ 31. Oktober 2001 11:22: Beitrag 2 mal editiert, zuletzt von multimac ]</font> Zitieren
Woodstock Geschrieben 31. Oktober 2001 Autor Geschrieben 31. Oktober 2001 Also, erstes Problem gelöst. Ich weiß nicht warum (wie eigentlich immer), aber mus an der Übergabe gelegen haben, habe sie neu geschrieben, und jetzt geht's. Aber, neues Problem. Also, ich habe main argv als Parameter ja so übergeben: char *argv[], also übergebe ich den anderen Funktionen argv so: char **argv. Damit hat er scheinbar auch gar kein Problem, denn er compilt und linkt. Aber, ich komme in die Funktion trotzdem nicht rein (Habe ich durch die Ausgabe von 'Hallo' ganz am Anfang der Funktion überprüft). Nur, was neu für mich ist, er stürzt ja scheinbar ab, aber er hängt sich auf, und gibt mir keine Fehlermeldung (auch wenn ich die ja eh nicht verstehe). Und man kann aus dem Programm nur raus, wenn man es über AltGr+Strg+Entf beendet. Hiiiilfe! Bine Zitieren
TingleTangle Geschrieben 31. Oktober 2001 Geschrieben 31. Oktober 2001 Hast du mal einen Breakpoint draufgesetzt. (Auf die Funktion auf die du nicht kommst) Oder einfach mal bis dahin gesteppt. <FONT COLOR="#a62a2a" SIZE="1">[ 31. Oktober 2001 11:18: Beitrag 1 mal editiert, zuletzt von DocNeo ]</font> Zitieren
multimac Geschrieben 31. Oktober 2001 Geschrieben 31. Oktober 2001 So, nun aber :-) #include <stdio.h> #include <malloc.h> #include <string.h> static char **_argv_kopieren(char **argv, int argc) { char **kopie = (char **) malloc( sizeof (char *) *argc); if( kopie == NULL) { printf("Fehler!\n"); return(NULL); } memcpy(kopie , argv, sizeof( char *) *argc); return(kopie); } int main(int argc, char **argv) { char **argv_kopie = _argv_kopieren ( argv, argc ); if(argv_kopie == NULL) { printf("Fehler!\n"); return(1); } for(int j = 0; j < argc; ++j) { printf("%d - %s\n", j, argv_kopie[j]); } return(0); } Nun hast du eine gesamte Kopie von argv. Gruß, multimac <FONT COLOR="#a62a2a" SIZE="1">[ 31. Oktober 2001 11:25: Beitrag 1 mal editiert, zuletzt von multimac ]</font> Zitieren
Woodstock Geschrieben 31. Oktober 2001 Autor Geschrieben 31. Oktober 2001 Das mit dem Brakpoint klappt nicht, weil ich ja Parameter über die Command Line übergebe, und ich das Programm nicht aus der Entwicklungsumgebung heraus starten kann. Bine Zitieren
Woodstock Geschrieben 31. Oktober 2001 Autor Geschrieben 31. Oktober 2001 Kann ich das kopieren nicht nicht dynamisch machen? Weil ich das auch möglichst nicht soll (im Moment). Ich habe ja ein Array in die ich diese Eingaben bisher gespeichert habe, allerdings durch einlesen von der Tastatur aus dem Programm heraus. Also, es geht mir eigentlich nur darum den Inhalt von argv[2], argv[3], ... argv[n] in einem Puffer zu speichern (damit ich die eingabe auf lower setzten kann), und dann den Inhalt des Puffers wiederum in das Array welches ich schon bisher für die Suchbegriffe genutzt habe (welches ja jetzt wo ich nichts mehr in dem Programm von der Tastatur eingeben lasse, frei ist). Bine Zitieren
haddock Geschrieben 31. Oktober 2001 Geschrieben 31. Oktober 2001 Versuchs mal so: void ppcpy(char** dest, const char** src, int last, int first = 0) { for(int d = 0, s = first; s < last; d++, s++) { strcpy(dest[d], src[s]); _strlwr(dest[d]); } dest[d] = NULL; // Sicherheit durch Nullterminierung } Aufruf: ppcpy(Eingabe2, argv, argc, 2 /* oder ab wo du anfangen willst */); <FONT COLOR="#a62a2a" SIZE="1">[ 31. Oktober 2001 11:58: Beitrag 2 mal editiert, zuletzt von captain haddock ]</font> Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.