zeiger auf zeiger und dessen wert ändern
-
...mensch weis gar nicht wie ich anfangen soll, denke das problem ist voll einfach aber bekomme es einfach nicht auf die reihe
also ich habe:
Ein hauptprogramm und will das argv[1] was ich ja mitgegeben bekomme beim aufruf, später "zerlegen".
Und dies jeweils nach jedem komma, also sollen nach der aktion a1="sD", a2="scan.txt", a3="MyDirectory" beinhalten(bzw. darauf zeigen).
Hatte versucht mitp = strrchr(argv[1], ',');
p die stelle des ersten kommas zu übergeben und wollte dies mit '\0' überschreiben, das hätte ich dann mit allen kommas gemacht.
Dannach wollte ich die pointer a1, a2, a3 so zurecht rücken das sie auf die einzelnen bereiche zeigen(vielleicht noch den freiraum nach dem komma rausfiltern).int main (int argc, char *argv[]) { //...so hier drinne habe ich mal die argv[1] definiert, damit ich das prog nicht immer "ausführen" muss... argv[1]= "sD, scan.txt, MyDirectory"; char *p; char *a1, *a2, *a3; ... }
aber egal wie ichs anstelle, da kommt nur absoluter sch... raus!!
dem pointer p weist er ja den buchstaben zu, oder in meinem falle ja das '\0'
aber er übereschreibt nicht die kommasbitte helft mir, bin schon fast am verzweifeln
-
Ich glaube, du hast da was missverstanden!
argv[] ist ein Array.Wenn du dein Prog mit 6 parametern aufrufst, stehen diese in argv[1] bis argv[6].
Also musst du das nicht zerpflücken.Wenn du dein Programm so aufrufst: 'meinProg.exe sD scan.txt MyDirectory' findest du die Parameter als
argv[0] = "meinProg.exe" argv[1] = "sD" argv[2] = "scan.txt" argv[3] = "MyDirectory"
in deinem Programm vor und kannst sie so benutzen.
-
ach ja, falls irgendwie wichtig(denke aber eher nicht) ich benutze DEV-C++ 4.9
-
DarthZiu schrieb:
Ich glaube, du hast da was missverstanden!
argv[] ist ein Array.Wenn du dein Prog mit 6 parametern aufrufst, stehen diese in argv[1] bis argv[6].
Also musst du das nicht zerpflücken.Freu
ne hab ich nicht mein argv[1] ist doch ein string!!!!
also hab ich nur 2 parameter in argv[], und ich will argv[1] zerlegen, muss so sein weil ich das tool von nen anderen prog aus starten will und nur einen parameter mitgeben kann, sprich argv[1]!
-
Isch hab das jetzt mal mit sscanf gemacht:
#include <stdio.h> #include <stdlib.h> #include <string.h> int main(int argc, char *argv[]) { argv[1] = "sD, text.txt, MyDirectory"; printf("%s\n", argv[1]); char c1[200]; char c2[200]; char c3[200]; int count = 0; sscanf(argv[1], "%s %s %s", c1, c2, c3); count = strlen(c1); c1[count-1] = '\0'; count = strlen(c2); c2[count-1] = '\0'; count = strlen(c3); c3[count-1] = '\0'; printf("%s %s %s\n", c1, c2, c3); return(0); }
Vielleicht hilfts.
Euer ItsNotYou
EDIT:
Ich habe die Eigenschaft von %s ausgenutzt und angenommen, " " wäre das letzte Zeichen vor dem Komma.
-
rendner schrieb:
also hab ich nur 2 parameter in argv[], und ich will argv[1] zerlegen, muss so sein weil ich das tool von nen anderen prog aus starten will und nur einen parameter mitgeben kann, sprich argv[1]!
Das musst du dann schon mit hinschreiben.
-
DarthZiu schrieb:
rendner schrieb:
also hab ich nur 2 parameter in argv[], und ich will argv[1] zerlegen, muss so sein weil ich das tool von nen anderen prog aus starten will und nur einen parameter mitgeben kann, sprich argv[1]!
Das musst du dann schon mit hinschreiben.
hatte ich doch --->...und will das argv[1] was ich ja mitgegeben bekomme beim aufruf, später "zerlegen"(gut man kann davon nicht ableiten das man nur einen parameter übergeben kann, aber da steht argv[1] zerlegen)
-
Danke! ItsNotYou
also so funtzt, muss mal einbauen und dann noch mal überprüfen kannste das in kurzen sätzen mal erläutern --->sscanf(argv[1], "%s %s %s", c1, c2, c3);
das zerlegt das ja, hab ich schon geschnallt aber aufgrund welcher tatsache????und wie geht das wenn ich aber c1, c2, c3 als pointer haben will...
also habs mal getestet und funktioniert, find ich klasse würde mich trotzdem auf ne variante mit pointern freuen oder ne erklärung wie mann dieses problem noch so umgehen kann(heist: warum ich depp das nicht auf dem normalen wege hinbekomme habe...
p = strrchr(argv[1], ',');
)!
rendner
-
sscanf funktioniert wie scanf...
sscanf([string, der zerlegt werden soll], "%c und %d oder %s", [platzhalter für %c], [platzhalter für %d], [platzhalter für %s]);
platzhalter:
%c - char
%d - dezimalnummer
%s - stringinformier dich da mal zu printf, scanf, sscanf usw.
Euer ItsNotYou
-
hab da noch mal ne kleine frage, hab jetzt in c3 meinen pfad.
Und möchte jetzt vor dem pfad noch etwas einfügen, wenn es geht ohne pointer oder extra array, sonst müsste ich jetzt wegen dieser einen action eine extra variable deklarieren.
c3 ist so deklariert:
char c3[200];
...
c3="MyDirectory/ordner1";nun möcht ich noch vor c3 "..\\\" hängen so das c3 dann ""..\\\MyDirectory/ordner1" enthällt.
gibts da was, hab leider nix gefunden wo man einen String direkt vor einen anderen String kopieren kann. müsste wahrscheinlich ne neue vari nehmen die schon "..\\\" enthällt und dann c3 anhängen ...
rendner
-
probier es mal mit sprintf() oder wsprintf().
wenn du keine feste variable deklarieren möchtest, probier mit einem dynamischen array als zwischenspeicher