Forum: Compiler & IDEs kleine pointer frage


von Simon (Gast)


Lesenswert?

Hi,

mir ist klar das man den array auch anders ansprechen könnte.
aber wie kann ich den pointer so lassen wie er ist, und nur einmal 
temporär eins hinzu zählen um das null zeichen ran zu bekommen?
1
    char *data_ptr;
2
    char data[200];
3
4
5
   *bf.data_ptr++ = c; // zeichen hinzu
6
   *bf.data_ptr+1 = '\0'; // am ende eine 0 hinzu

von Peter II (Gast)


Lesenswert?

1
bf.data_ptr[1] = '\0';

von C Anfänger (Gast)


Lesenswert?

Auch so:
1
*(bf.data_ptr+1) = '\0'; // am ende eine 0 hinzu

von easy (Gast)


Lesenswert?

Simon schrieb:
> *bf.data_ptr++ = c; // zeichen hinzu
> *bf.data_ptr+1 = '\0'; // am ende eine 0 hinzu

Schreib die Zeilen auseinander und du siehst den Fehler sofort

data_ptr = c;
data_ptr++;        // auf welches Zeichen zeigt er wohl?
*(data_ptr+1) ...  // und wohin zeigt er jetzt?

von MWS (Gast)


Lesenswert?


von easy (Gast)


Lesenswert?

shit, die * sind auf der Strecke geblieben:
*data_ptr = c;
*data_ptr++;        // auf welches Zeichen zeigt er wohl?
*(data_ptr+1) ...  // und wohin zeigt er jetzt?

von easy (Gast)


Lesenswert?

shit und jetzt eins zuviel:
*data_ptr = c;
data_ptr++;        // auf welches Zeichen zeigt er wohl?
*(data_ptr+1) ...  // und wohin zeigt er jetzt?

und nu iss juuut.

von C Anfänger (Gast)


Lesenswert?

MWS schrieb:
> http://pweb.netcom.com/~tjensen/ptr/cpoint.htm
> Im Pdf Seite 15.

Huuuuch das ist ja in Englisch!

I cannot no english not.

von MWS (Gast)


Lesenswert?

C Anfänger schrieb:
> Huuuuch das ist ja in Englisch!
>
> I cannot no english not.

Stell Dir vor die C-Quellcodes im Pdf sind Bildchen.

von Simon (Gast)


Lesenswert?

easy schrieb:
> *(data_ptr+1) ...  // und wohin zeigt er jetzt?

Ich glaube das war das gesuchte :-) Danke

von MWS (Gast)


Lesenswert?

Simon schrieb:
> easy schrieb:
>> *(data_ptr+1) ...  // und wohin zeigt er jetzt?
>
> Ich glaube das war das gesuchte :-) Danke

Das ist zwar jetzt syntaxmäßig richtig, den Fehler im Code behebt das 
nicht. Was macht denn das ++, bzw. wie ist die Vorrangfolge?

Simon schrieb:
>    *bf.data_ptr++ = c; // zeichen hinzu
>    *bf.data_ptr+1 = '\0'; // am ende eine 0 hinzu

von qwe (Gast)


Lesenswert?

Nur zur Vollständigkeit:

 a[b] ⇔ *(a+b) ⇔ *(b+a) ⇔ b[a]

Ob du also:
1
  bf.data_ptr[1]
2
  *(bf.data_ptr+1)
3
  *(1+bf.data_ptr)
4
  1[bf.data_ptr]
scheibst, ist dem Compiler vollkommen egal.  Man wählt die Variante, die 
im aktullen Kontext am verständlichsten ist.

Am gebräuchlichsten ist die erste.

von Simon (Gast)


Lesenswert?

MWS schrieb:
> Das ist zwar jetzt syntaxmäßig richtig, den Fehler im Code behebt das
> nicht. Was macht denn das ++, bzw. wie ist die Vorrangfolge?


Naja ich dachte es hängt noch eine \0 an ohne den pointer drüber hinaus 
zu erhöhen.

von qwe (Gast)


Lesenswert?

> wie kann ich den pointer so lassen wie er ist, und nur einmal
> temporär eins hinzu zählen um das null zeichen ran zu bekommen?
1
>   *bf.data_ptr++ = c; // zeichen hinzu
2
>   *bf.data_ptr+1 = '\0'; // am ende eine 0 hinzu

Die erste Zeile erhöht den Pointer ja schon um eins nachdem er benutzt 
wurde (post-increment), das heisst, in der zweiten Zeile steht er 
bereits hinter dem "c".  Also einfach die \0 dort hin schreiben:
1
   *bf.data_ptr++ = c; // zeichen hinzu
2
   *bf.data_ptr = '\0'; // am ende eine 0 hinzu

von MWS (Gast)


Lesenswert?

Simon schrieb:
> Naja ich dachte es hängt noch eine \0 an ohne den pointer drüber hinaus
> zu erhöhen.

qwe schrieb:
> Die erste Zeile erhöht den Pointer ja schon um eins nachdem er benutzt
> wurde (post-increment)

So ist's.
Und hier stand's:

MWS schrieb:
> http://pweb.netcom.com/~tjensen/ptr/cpoint.htm
> Im Pdf Seite 15.

Und man musste auch kein Englisch dafür können.

von easy (Gast)


Lesenswert?

No, ihr Ludolfs wart beide zu spät
Beitrag "Re: kleine pointer frage"

von MWS (Gast)


Lesenswert?

easy schrieb:
> No, ihr Ludolfs wart beide zu spät
> Beitrag "Re: kleine pointer frage"

Du meinst Deinen Beitrag, den Du noch zweimal ändern musstest?

easy schrieb:
> Schreib die Zeilen auseinander und du siehst den Fehler sofort

Der Fehler wurde vom TE eben nicht gesehen, wie später im Thread 
erkennbar war, bzw. wurde dann ohne Deine weitere Beteiligung geklärt. 
An Deiner Stelle würd' ich also überlegen, was Dein Hinweis in obiger 
Form getaugt hat, anstatt "Erster" zu schreien. LOL

von easy (Gast)


Lesenswert?

@MWS
Man, bist du eine arme S... und raffst das nicht. :'( :'( :'(

von MWS (Gast)


Lesenswert?

easy schrieb:
> @MWS
> Man, bist du eine arme S... und raffst das nicht. :'( :'( :'(

Ja, hast recht, im Umgang mit einem Vollhorst wie Dir hab' ich so meine 
Schwierigkeiten.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.