- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 14

Thema: Grundlagen... Pointer auf Strings / Arrays

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    04.03.2010
    Beiträge
    26
    Blog-Einträge
    1

    Grundlagen... Pointer auf Strings / Arrays

    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....

    Code:
    char strIn[] = "123.321";
    char strOut[] = "";
    
    char *inPtr = (char *)&strIn;
    char *outPtr = (char *)&strOut;
    
    while(*inPtr++ != 46)*outPtr++ = *inPtr;
    Was Mache ich Falsch ?
    Geht das überhaupt so ?

    Danke für Jedliche Antwort. Mfg Fugitivus

  2. #2
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    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.

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    02.11.2005
    Alter
    49
    Beiträge
    1.146
    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++;

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    04.03.2010
    Beiträge
    26
    Blog-Einträge
    1

    2. versuch

    hab es jezt mal so versucht:

    Code:
    char strIn[] = "123.321";
    char strOut[20] = "";
    
    char *inPtr = (char *)&strIn;
    char *outPtr = (char *)&strOut;
    
    while(*inPtr++ != 46)*outPtr++ = *inPtr;
    jezt stürzt mir gleich der mc ab......
    komme mir unheimlich blöde vor....

    Mfg Fugitivus

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    04.03.2010
    Beiträge
    26
    Blog-Einträge
    1

    Danke !

    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....

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    04.03.2010
    Beiträge
    26
    Blog-Einträge
    1

    Irgendwas mache ich immer noch falsch

    Hi !
    Ich weiß nicht mehr weiter....
    jezt stürzt mir der mc nur noch ab xD

    Code:
    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;
    }
    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 xD

  7. #7
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    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.

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    04.03.2010
    Beiträge
    26
    Blog-Einträge
    1

    hehe

    hehe, weil ich pointer peilen will... war halt ne nette aufgabenstellung....

    mfg fugitivus...

  9. #9
    Neuer Benutzer Öfters hier
    Registriert seit
    04.03.2010
    Beiträge
    26
    Blog-Einträge
    1

    achso wegen dem Gottbewahre

    achso wegen dem Gottbewahre:

    sry... so natürlich: while(*inPtr != 46 && *inPtr != 44){bla..}

    mfg fugitivus

  10. #10
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    @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.

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress