PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [C] Kommandozeilen Parameter in einem neuen Array speichern



Uratuso
09.04.2010, 16:51
Hallo. Hab ein C Programm das Parameter übergeben bekommt. Diese werden in argv gespeichert


int main(int argc, char *argv[])
{

Das Problem ist, dass ich das hier überkomme:

argv[0] = Programmname
argv[1] = Ziel-Text

also argv[1] enthält den gesammten Ziel-Text, nicht nur ein Zeichen davon. Ich möchte nun diesen Text in ein neues Array kopieren damit ich via

newArray[7] auf den 8. ten Buchstaben zugreifen kann. Wie geht das?

strcpy scheiterte irgendwie :/.
Mein Lösungsansatz ist glaubich etwas zu kompliziert; habe argv in eine Textdatei geschrieben und dann wieder ausgelesen und dies dem Array hinzugefügt.


Kurz: Wie kopiere ich argv so in ein Array, damit ich auf jeden einzelnen Buchstaben zugriff habe?

blackberry
09.04.2010, 16:58
Du hast doch auch so auf jeden einzelnen Buchstaben Zugriff...

argv[1][7] ---> 8. Buchstabe

cookie-exploit
09.04.2010, 17:17
int main(int argc, char *argv[])
{
char *newArray = argv[1];
printf("%c",newArray[7]);
}
ich hoffe das hilft dir weiter ;)


MFG cookie-exploit

blackberry
09.04.2010, 17:24
@cookie-exploit
Ich denke du hast deinen Post editiert, weil du eingesehen hast, dass mein Weg und dein Weg absolut gleich sind (bis auf die Tatsache, dass du eine Variable mehr brauchst, weswegen ich meinen Weg vorziehen würde).
Dennoch habe ich jetzt schon einen Beispielcode geschrieben und hab keine Lust, dass das umsonst war.

Insofern:

#include <stdio.h>


int main(int argc, char *argv[])
{
if (argc < 2 || strlen(argv[1]) < 8)
{
puts("Syntax: [prog] <string>");
return 1;
}

printf("8. Zeichen von argv[1]: %c\n", argv[1][7]);

return 0;
}

Test:

Microsoft Windows [Version 6.1.7600]
Copyright (c) 2009 Microsoft Corporation. Alle Rechte vorbehalten.

C:\Users\Admin\Desktop>a
Syntax: [prog] <string>

C:\Users\Admin\Desktop>a 123456789
8. Zeichen von argv[1]: 8

cookie-exploit
09.04.2010, 18:16
jap hast du recht^^ ...ich habe mir den nur flüchtig angeschaut
und erst nicht drauf geachtet, dass du zwei eckige klammern hinter dem Array gemacht hast :p

Uratuso
09.04.2010, 18:21
Okay verstanden. Danke. Was heisst das folgende, und ist es problematisch?


char *mySymbol;

whoAmI(&mySymbol)

void whoAmI(char *Symbol){

*Symbol = 'A';

}


[Warning] passing arg 1 of 'whoAmi' from incompatible pointer type

GregorSamsa
09.04.2010, 18:30
Bitte mal mit Code-Tags schreiben. Und den Rest vllt. auch, so kann man _nichts_ erkennen.

blackberry
09.04.2010, 18:44
whoAmI(&mySymbol)
zu
whoAmI(mySymbol)

mySymbol := char *
&mySymbol := char ** (<--- Zeiger auf einen Zeiger auf einen Character)

Uratuso
10.04.2010, 09:49
whoAmI(&mySymbol)
zu
whoAmI(mySymbol)

mySymbol := char *
&mySymbol := char ** (<--- Zeiger auf einen Zeiger auf einen Character)

Ich versteh nicht ganz wieso ich nicht


whoAmI(&mySymbol) schreiben sollte, damit ich ich in der Funktion

.....(char *Symbol) schreiben kann, muss ich doch eine Adresse übergeben?


Und
mySymbol := char *
&mySymbol := char ** versteh ich gar nicht :/

cTPu1bjo
10.04.2010, 09:55
void whoAmI(char *Symbol){
Also muss ein Char-Zeiger als Parameter übergeben werden und nicht die Adresse eines Zeigers.


mySymbol := char *
&mySymbol := char **

mySymbol ist ein Char-Zeiger, dh eine Adresse die auf irgendwelche Chars zeigen kann.
Nimmst du nun die Adresse von einem Char-Zeiger, also zb
&mySymbol, hast du nun eine Adresse die auf einen Zeiger zeigt, also ein Zeiger auf einen Zeiger. (char **)

Hoffe das ist nicht allzu verwirrend. Ansonsten ließ nochmal ein Kapitel über Zeiger in C.