Bei dir hat "strout" keine ausreichende Länge, ( char strOut[] = ""; )
und gleich dahinter stehen deine Pointer.
Es ist zu vermuten, dass du mit dem Byte transfer dann deine Pointer vernichtest und im Nirwana landest.
Hi !
Ich hab irgendwie Probleme damit Pointer richtig zu Verstehen...
Beispiel:
In folgendem Code will ich eigendlich nur Zeichen von einen String in den Anderen Schieben....
Was Mache ich Falsch ?Code:char strIn[] = "123.321"; char strOut[] = ""; char *inPtr = (char *)&strIn; char *outPtr = (char *)&strOut; while(*inPtr++ != 46)*outPtr++ = *inPtr;
Geht das überhaupt so ?
Danke für Jedliche Antwort. Mfg Fugitivus
Bei dir hat "strout" keine ausreichende Länge, ( char strOut[] = ""; )
und gleich dahinter stehen deine Pointer.
Es ist zu vermuten, dass du mit dem Byte transfer dann deine Pointer vernichtest und im Nirwana landest.
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
PicNic hat den gröbsten Fehler schon erwähnt. Du musst für Deinen Ergebnis-String ausreichend Speicherplatz reservieren.
Der zweite Fehler ist, dass Du den inPtr zu früh inkrementierst. So würdest Du das erste Zeichen verlieren.
So würde Dein Code funktionieren:
Code:char strIn[] = "123.321"; char strOut[8] = ""; char *inPtr = (char *)&strIn; char *outPtr = (char *)&strOut; while(*inPtr != 46) *outPtr++ = *inPtr++;
hab es jezt mal so versucht:
jezt stürzt mir gleich der mc ab......Code:char strIn[] = "123.321"; char strOut[20] = ""; char *inPtr = (char *)&strIn; char *outPtr = (char *)&strOut; while(*inPtr++ != 46)*outPtr++ = *inPtr;
komme mir unheimlich blöde vor....
Mfg Fugitivus
Danke für Eure Antworten !
askazo : jo... da war er der gedankenfehler....
komisch ich dachte das inPtr erst nach schleifendurchlauf incrementiert wird...
aber da hab ich mal nen gedankenfehler der mich schohn sehr sehr oft gepiesakt hatt....
DANKE !
ach so... in zukunft werde ich dann mal vorher feste längen zuweisen xD
Mfg Fugitievus....
Hi !
Ich weiß nicht mehr weiter....
jezt stürzt mir der mc nur noch ab xD
Ich weiß es echt nicht mehr... liegt es jezt am pointer ? was übergebe ich hier, wo falsch ? Pointer Magie..... ich verstehe warum es diesen ausdruck gibt xDCode:double strtodbl(char strValue[]) { int vkOut = 0; char strOut[20] = ""; double outValue = 0; char *inPtr = (char *)&strValue; char *outPtr = (char *)&strOut; while(*inPtr != 46) { *outPtr++ = *inPtr++; } *++outPtr = '\n'; vkOut = atoi(strOut); outValue = (double)vkOut; return outValue; }
Gott bewahre dich, dass einmal eine Zahl kommt OHNE dezimalpunkt. Da kommt er aus "while" nicht mehr zurück
Klingt so, als wolltest du die dezimalen abzwicken und den ganzenzahligen Teil in ein double stellen ? Warum dann aber eine float-Zahl ?
empfehle:
int vkOut = atoi (strValue); // der atoi hört bei "." sowieso auf
double outValue = vkout;
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
hehe, weil ich pointer peilen will... war halt ne nette aufgabenstellung....
mfg fugitivus...
achso wegen dem Gottbewahre:
sry... so natürlich: while(*inPtr != 46 && *inPtr != 44){bla..}
mfg fugitivus
@Flüchtiger, würde als Sicherstes empfehlen:
while(*inPtr >= '0' && *inPtr <= '9' ){bla..}
btw: pointer rumschubsen is ok, man lernt 'ne menge
ausserdem sieht C viel professioneller aus, wenn jede Variable vorn und hint' mit sonderzeichen garniert ist
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
Lesezeichen