Pointer in Array bzw. Array aus Funktion auslesen
-
CrazyFisch schrieb:
Hm also erstmal vielen Dank!
Ich hab da ich jetzt noch so wenig erfahrung hab ein paar fragen.
Und zwar wieso machst du ptr +2? und warum kommt dann da das richtige ergebnis raus?
Ich hätte das alles erstmal in en Array gepackt etc..
Ich glaub ich denk zu umständlich

edit//
es wäre cool wenn du das alles mit nem komment kurz mir beschreiben könntest das ich das versteh"Hal::lo"
steht als Nullterminierter String so im Speicher:
'H','a','l',':',':','l','o','\0'Im Gewinnfall
'H','a','l',':',':','l','o','\0' ^ ^ ^ ^ | | | | input | | ergebnis | | | ptr+1 | ptrergebnis zeigt also auf einen auch Nullterminierten STring, nämlich "lo".
-
Wieder Vielen Dank!

hätt ich das nur früher gewusst

okay ja, nächstes problem

Angenommen ich mach "ha::ll::o"
dann wird ll::o als suffix genommen
ich hab nur ein problem ich möchte jetzt
*(ptr+2)einem neuen char zuweisen damit ich von da an ne neue schleife machen kann, die
das richtige suffix ausfindig macht.char* iptr = &(ptr+2);klappt net..

edit:
char iptr = &(ptr+2);char ohne * klappt
zum zuweisen mal schaun wies läuftedit2:
damdamdam -.-klappt net
Help
-
Okay Habs!
Danke danke danke!
#include<stdio.h> char *extract(char* input) { char* ptr; for(ptr = input; *ptr != '\0'; ptr++) { if(*ptr == ':') { if(*(ptr+1) == ':') { char* iptr = &*(ptr+2); for (iptr; *iptr !='\0'; iptr++) { if(*iptr == ':') { if(*(iptr+1) == ':') { return iptr+2; } } } } } } return 0; } int main() { char* suff=extract("ha::l::lo"); printf("Das Suffix lautet: %s", suff); getchar(); }Hier
char* iptr = &*(ptr+2);ich hab den stern nach dem & vergessen
-
CrazyFisch schrieb:
char* iptr = &(ptr+2);klappt net..

Jo, der Typ stimmt auch nicht.
char* iptr = ptr+2;
klappt.
ptr ist ein Zeiger.
ptr+2 auch.
&(ptr+2) wäre ein Zeiger auf einen Zeiger.
*(ptr+2) wäre ein char.
ptr[2] wäre der selbe char wie *(ptr+2).
&ptr[2] wäre der selbe Zeiger wie ptr+2.CrazyFisch schrieb:
Angenommen ich mach "ha::ll::o"
dann wird ll::o als suffix genommenich hab nur ein problem ich möchte jetzt
*(ptr+2)einem neuen char zuweisen damit ich von da an ne neue schleife machen kann, die
das richtige suffix ausfindig macht.Kannste machen. Würde ich anders machen, ich würde rückwärts laufen.
Oder vorwärts laufen und mir das Ergebnis merken, statt rauszureturnen.Meine Lösung:
http://pastebin.de/34089
(Extra woanders gespeicher, um Dir das Ergebis nicht zu verraten, wenn Du lieber selber rätseln magst.)
-
CrazyFisch schrieb:
Hier
char* iptr = &*(ptr+2);ich hab den stern nach dem & vergessen
Naja, &* hintereinander hebt sich auf. Kannst sogar beide weglassen.
-
CrazyFisch schrieb:
Okay Habs!
Danke danke danke!
#include<stdio.h> char *extract(char* input) { char* ptr; for(ptr = input; *ptr != '\0'; ptr++) { if(*ptr == ':') { if(*(ptr+1) == ':') { char* iptr = &*(ptr+2); for (iptr; *iptr !='\0'; iptr++) { if(*iptr == ':') { if(*(iptr+1) == ':') { return iptr+2; } } } } } } return 0; } int main() { char* suff=extract("ha::l::lo"); printf("Das Suffix lautet: %s", suff); getchar(); }Du fischt aber jetzt nur noch ein :: raus. Mit H:
:l::lo müßte es wieder Probleme geben. Und mit dem alten hal::lo auch.
-
Also ich hab es jetzt Fertig!
aber ich verstehe deine lösung zu ha::ll::o nicht
wieso wird da nur das suffix o angezeigt du hast nicht viel verändert

Meine lösung is jetzt so:
#include<stdio.h> char *extract(char* input) { char* ptr; for(ptr = input; *ptr != '\0'; ptr++) { if(*ptr == ':') { if(*(ptr+1) == ':') { char* iptr = ptr+2; for (iptr; *iptr !='\0'; iptr++) { if(*iptr == ':') { if(*(iptr+1) == ':') { return iptr+2; } } } if(*iptr !=':') { return ptr+2; } } } } return 0; } int main() { char* suff=extract("hallo"); if(suff) printf("Das Suffix lautet %s", suff); else printf("Kein Suffix!"); getchar(); }
-
Okay ich habs verstanden, aber ich wäre im leben nicht selbst drauf gekommen...
Du verdammtes Genie

-
ach verdammt!
Stimmt....
okay deine lösung is da ziemlich elegant...
Vielen Dank hast mir sehr geholfen...! _D

-
Ok

nächste Frage
Ich möchte die Funktion jetzt als void methode und hab
void extract2(char* input, char** output)als ansatz gegeben...
void extract2(char* input, char** output) { char* ptr; for(ptr = input; *ptr != '\0'; ptr++) { if(*ptr == ':') { if(*(ptr+1) == ':') { *output = &*(ptr+2); } } } char* suff = *output; if(suff) printf("Das Suffix lautet %s", suff); else printf("Kein Suffix!"); }soweit siehts eig ganz nett aus aber ich hab da iwie echt ein problem mit diesen zeigen ... als ausgabe kann natürlich kein return mehr stehen.. jetzt soll ich das aber als pointer auf einen pointer ausgeben! was soll das sein? **char output -.-
Ich seh aber auch grad das ich einen einfachen pointer mit &*beschreib..
bitte ich bin so unbeholfen..
-
CrazyFisch schrieb:
Ok

nächste Frage
Ich möchte die Funktion jetzt als void methode und hab
void extract2(char* input, char** output)als ansatz gegeben...
Der Trick ist erstmal der richtige Aufruf:
int main() { char* suff; extract("h::al::lo",&suff); if(suff) printf("Das Suffix lautet %s", suff); else printf("Kein Suffix!"); return 0; }
-
Ja
ich weis nicht was ich sonst in dem void ausgeben soll den main aufruf hab ich soweit auch noch von dir vorhin aber ich weis net wie ich des machen sollzb an der stelle
*output = &*(ptr+2);bekomme ich immer nen fettes error bzw muss ich immer wenn der compiler an der stelle ist in abwürgen weil er sonst nichts macht
-
CrazyFisch schrieb:
bitte ich bin so unbeholfen..
Die Aufgaben sind kacke. Man weiß, was der Aufgabensteller sich vorgestllt hat, oder man weiß es nicht und steht vor einer Wand, die man selber nicht erklimmen kann.
-
CrazyFisch schrieb:
Ja
ich weis nicht was ich sonst in dem void ausgeben soll den main aufruf hab ich soweit auch noch von dir vorhin aber ich weis net wie ich des machen sollzb an der stelle
*output = &*(ptr+2);bekomme ich immer nen fettes error bzw muss ich immer wenn der compiler an der stelle ist in abwürgen weil er sonst nichts macht
*output = &*(ptr+2);
heisst
wo output hinzeigt (und output zeigt auf suff der main), da schreibe folgendes rein:
(soweit perfekt)
die Adresse des Anfangs des Suffix'. Passt doch.
-
Im moment sieht es so aus..
void extract2(char* input, char** output) { char* ptr; for(ptr = input; ptr != '\0'; ptr++) { if(*ptr == ':') { if(*(ptr+1) == ':') { *output = ptr+2; } } } output; } int main() { char* suff; extract2("h::al::l::o",&suff); if(suff) printf("Das Suffix lautet %s", suff); else printf("Kein Suffix!"); getchar(); }ich weis einfach nicht wie ich das jetzt zurückgeben soll..
-
CrazyFisch schrieb:
Im moment sieht es so aus..
void extract2(char* input, char** output) { char* ptr; for(ptr = input; ptr != '\0'; ptr++) { if(*ptr == ':') { if(*(ptr+1) == ':') { *output = ptr+2; } } } output; } int main() { char* suff; extract2("h::al::l::o",&suff); if(suff) printf("Das Suffix lautet %s", suff); else printf("Kein Suffix!"); getchar(); }ich weis einfach nicht wie ich das jetzt zurückgeben soll..
In der Laufbedingung fehlt der *
Sonst alles richtig.Die Zeile
output;bewirkt nichts und kann weg.
Edit: Keine Rückgabe nötig, weil
*output = ptr+2;schon direkt in die suff der main() schreibt.
*output=0;sollte noch an den Anfanng der extract2, um zu erkennen, wenn kein :: überhaupt da war.
-
Boar

Super geil Danke!
Wirklich vielen Dank hab endlich die pointer geschichte verstanden!
Naja wenigstens ein bischen
Vielen Lieben Dank!
