Pointer
-
const char *cp1 = "A string example"; //16 Zeichen lang char *cp2 = "A different string"; //18 Zeichen lang8du hattest es doch richtig

//Edit: In Zeile 15 fehlt ein Semikolon am Ende
-
OK, habe den Code nun 2 Posts weiter oben editiert, aber der Fehler bleibt bei beiden Pointern bestehen.

L. G.
Steffo
-
Steffo schrieb:
OK, habe den Code nun 2 Posts weiter oben editiert, aber der Fehler bleibt bei beiden Pointern bestehen.

L. G.
SteffoDu musst die eckigen Klammern hinter
cp1undcp2weglassen.
-
Oh, stimmt! Ist ja kein Array!

THX!
L. G.
Steffo
-
Steffo schrieb:
Oh, stimmt! Ist ja kein Array!

THX!
L. G.
SteffoEin String ist ein Array. Schließlich deklarierst du mit char * einen Zeiger auf ein Array von char. Aber das führt wohl zu weit.
-
Stimmt auch nicht ganz, mit * deklarierst du einen Zeiger auf ein char. Ein Zeiger auf ein Array von char sieht so aus:
char (*p)[];.Aber das führt definitiv zu weit

-
Ich habe zu dem geposteten Beispiel im Buch noch eine Frage:
const char *cp1 = "A string example"; //16 Zeichen lang const char *cp2 = "A different string"; //18 Zeichen lang char largeStr[16 + 18 + 2]; strcpy(largeStr, cp1); strcat(largeStr, " "); //Ein Leerzeichen am Ende von largeStr einfügen strcat(largeStr, cp2); //Gibt "A string example A different string" aus. cout<< "\nlargeStr: " << largeStr;Bei
char largeStr[16 + 18 + 2];werden am Ende 2 Zeichen hinzugefügt. Eins fürs Leerzeichen und das andere? Für das abschließende Nullzeichen? Im Buch steht's nicht drin!
Ferner habe ich bei der Autovervollständigung erkannt, dass strcat(<#char * #>, <#const char * #>) beim ersten Parameter ein char * verlangt, aber ich habe largeStr nicht wirklich als Pointer deklariert und wieso muss der zweite Parameter konstant sein?!
EDIT: Ich merke gerade, dass der Code auch dann geht, wenn der zweite Parameter nicht konstant ist.
Danke wieder im Voraus!
Liebe Grüße
Steffo
-
Steffo schrieb:
Bei
char largeStr[16 + 18 + 2];werden am Ende 2 Zeichen hinzugefügt. Eins fürs Leerzeichen und das andere?
Das steht für das
'\0'(0-Terminierungs-)Zeichen, das am Ende angehangen werden muss
-
const char* ist ein Zeiger, dessen Ziel (in dem Fall ein String) nicht verändert werden kann. Dadurch das die Funktion einen const char* als Parameter übernimmt garantiert sie dir, dass sie den String nicht verändern wird, sie kann es schlicht nicht. Wenn du statt dessen einen char* übergibst wird das implizit einfach zu einem const char* konvertiert, denn Schreibschutz hinzufügen ist ungefährlich. Andersherum geht das dagegen nicht, einen const char* kann man nicht ohne weiteres in einen char* konvertieren.
-
hgjghj schrieb:
Ein String ist ein Array. Schließlich deklarierst du mit char * einen Zeiger auf ein Array von char.
Ein Zeiger vom Typ
char*ist ein Zeiger, der auf ein char-Objekt zeigen kann -- wie zB das erste Element eines char-Arrays. Es ist aber kein Zeiger auf ein Array. Ein Zeiger auf ein char-Array ist vom Typchar(*)[N], wobei N die Anzahl der Elemente des Arrays ist.#include <iostream> int main() { const char *p = "p zeigt auf das erste Zeichen"; const char (*q)[31] = &"q ist ein Zeiger auf ein Array"; std::cout << p << '\n'; std::cout << *q << '\n'; }
-
Danke, für eure Antworten, hat mir wirklich weitergeholfen!

EDIT: Ich sehe gerade, dass die Antwort im Buch auf der nächsten Seite stand.

L. G.
Steffo