Verwirrung um das kopieren von Pointern
-
Hallo zusammen,
wenn ich die C-Programming language richtig verstehe, bedeutet der Ausdruck
p = q
wobei p und q Pointer sind, dass p nun ebenfalls auf das Element zeigt, auf das q zeigt.
O-Ton C Programming Language:
For example, if iq is another pointer to int, iq = ip copies the contents of ip into iq, thus making iq point to whatever ip pointed to. (Section 5.1, letzte Zeile)
.
Bei diesem Code habe ich jedoch ein Problem:
int i = 0; while((ret = cursorp->get(cursorp, &key, &data, DB_PREV)) == 0 && i < 10){ buffer = data.data; blogpost.stru_header = buffer; blogpost.stru_entry = buffer + 13; if (strncasecmp (blogpost.stru_header, entry_headerbuffer, 10) != 0){ printf("<h3>%s</h3><br/>\n", blogpost.stru_header); } printf("<li><A HREF=\"?e%s\">[l]</A> %s<br/>\n", key.data, blogpost.stru_entry); entry_headerbuffer = blogpost.stru_header; i++; }
Die while Schleife wird durchlaufen. Pro Durchlauf wird ein Tuppel aus der Datenbank ausgelesen. Wenn der Wert "entry_headerbuffer" gleich ist, wie der "entry_headerbuffer" vom vorherigen Eintrag, soll nichts passieren. Sonst die printf-Funktion
printf("<h3>%s</h3><br/>\n", blogpost.stru_header);
aufgerufen werden.
Problem:
Wenn ichentry_headerbuffer = blogpost.stru_header;
übergebe, ist entry_headerbuffer bei der nächsten Iteration der Schleife == blogpost.stru_header. Dies darf, um einen Stringvergleich zu gewährleisten, nicht der Fall sein.
Meine Fragen:
a) Wie ist der Eintrag der C Programming Language richtig zu verstehen?
b) Wie umgehe ich das Problem am besten?Besten Dank!
Jan
-
jAIk schrieb:
Wenn ich
entry_headerbuffer = blogpost.stru_header;
übergebe, ist entry_headerbuffer bei der nächsten Iteration der Schleife == blogpost.stru_header. Dies darf, um einen Stringvergleich zu gewährleisten, nicht der Fall sein.
ich verstehe nicht wirklich, was du damit meinst. Du übergibst was, wem?
-
Hi,
ich erkläre das mal etwas ausführlicher:
Der Code ist Teil eines CGIs.
Ein char *buffer enthält z.B. folgenden string bei Iteration 1:
Sat, 10. Nov\0Hallo Welt\0
Dieser Eintrag wird über
buffer = data.data; blogpost.stru_header = buffer; blogpost.stru_entry = buffer + 13;
in die struct blogpost geschrieben.
Die printf-Ausgabe könnte also unter Verwendung von blogpost.stru_header und blogpost.stru_entry folgendes erzeugen:
Sat, 10. Nov Hallo Welt
Da ich jedoch in diesem Fall das "Sat, 10. Nov" nicht über jedem Eintrag separat stehen haben möchte, sondern in der Form:
Sat, 10. Nov Hallo Welt Eintrag 2 Eintrag 3 ... Sun, 11. Nov Foo bar
Nun habe ich eine char *entry_headerbuffer erstellt, welche den blogpost.stru_header, also "Sat, 10.Nov" zwischenspeichern soll, um bei der nächsten Iteration zu prüfen, ob der Eintrag identisch zum vorherigen ist, oder ob blogpost.stru_header nun z.B. "Sun, 11.Nov" ist.
Sollten noch Fragen offen sein stehe ich gerne zur Verfügung!
Lg
Jan
-
Wieso vergleichst du nicht direkt die Adressen, auf die die beiden Pointer zeigen?
Etwa so:
if (blogpost.stru_header != entry_headerbuffer) { printf("<h3>%s</h3><br/>\n", blogpost.stru_header); }
MfG