[Anfänger] Array mit CStrings als Parameter mitgeben
-
Hi,
bin leider noch totaler C Anfänger und versuche gerade einen Array mit CStrings als Parameter mit zu geben um dort einen Wert zu setzen:
#include <iostream> using namespace std; void setze(char*); int main() { char* array[5]; //Zum Bearbeiten setze(array); cout << array[0] <<"\n"; // Beenden des Programmes durch druecken einer Taste system("Pause"); } void setze(char* array) { array[0] = "huhu"; }Hier bekomm ich leider folgenden Fehler:
array.cpp: In function `int main()': array.cpp:9: error: cannot convert `char**' to `char*' for argument `1' to `void setze(char*)' array.cpp: In function `void setze(char*)': array.cpp:18: error: invalid conversion from `const char*' to `char'Was genau ist ein char** und wo kommt der Typ her? Ich erstell doch eigentlich kein char**.
Was mach ich hier falsch ?
-
> char* array[5]
Hier erstellst du ein Array aus C-Strings, nicht aus chars!
-
Das Stück ist so dermaßen voller Fehler, dass du es lieber sofort löschst.
Nimm std::string wenn nichts dagegen spricht oder lies in deinem Buch noch mal das Kapitel über C-Strings durch.Wenn du das hast, kannst du ja wieder posten, was du dann hast - wenn dann wenigsten ein bisschen zusammenpasst, wird dir auch geholfen^^
aber hier passt eben so wenig, dass man(zumindest ich^^) nicht mal ansatzweise weiß, wo man anfangen sollte, zu erklären...bb
-
stormsam schrieb:
Was genau ist ein char** und wo kommt der Typ her? Ich erstell doch eigentlich kein char**.
Was mach ich hier falsch ?char ist ein Datentyp.
char* ist ein Zeiger auf ein Element dieses Datentyps.
char** ist ein Zeiger auf einen Zeiger.Aber nimm Abschied von char-strings wenn es geht und lerne gleich die STL. Deinen Code kann man viel kürzer schreiben:
#include <iostream> #include <string> using namespace std; void setze(char*); int main() { std::string myString; setze(myString); cout << myString <<"\n"; // Beenden des Programmes durch druecken einer Taste system("Pause"); } void setze(std::string& text) { text = "huhu" }Okay, jetzt deinen Code nochmal, aber so dass er funktioniert:
#include <iostream> #include <cstring> using namespace std; void setze(char*); int main() { char array[5]; //Zum Bearbeiten setze(array); cout << array <<"\n"; // Beenden des Programmes durch druecken einer Taste system("Pause"); } void setze(char* array) { strcpy(array, "huhu"); }Wenn Du ein Array erstellst, dann ist der Name der Variablen ohne die [] der Zeiger.
Sprich:
char array[5];
array ist vom Typ char*.
Und array[0] ist vom Typ char.
Arrays aus char-Zeigern ist wieder ein Thema für sich.. aber ganz ehrlich: Nimm std::string und du bist alle Sorgen los.
Wenn Du allerdings wirklich C programmieren willst, ist dein Code nicht gültig.
rya.
-
danke Scorcher24, dein Beitrag hat mir sehr weitergeholfen.
Ich werde mir die STL auch noch anschauen.
Wollt aber doch noch ein wenig an meinem Code weiter basteln, was hält ihr den davon:#include <iostream> using namespace std; void setze(char**); int main() { char* array[5]; //Zum Bearbeiten setze((char**)array); cout << array[0] <<"\n"; // Beenden des Programmes durch druecken einer Taste system("Pause"); } void setze(char** array) { array[0] = "huhu"; }Das scheint ja so zu gehen wie ich wollte, sogar mit einem Array von Zeigern. Und dann geb ich den Zeiger auf die Zeiger weiter

-
"Das scheint ja so zu gehen wie ich wollte, sogar mit einem Array von Zeigern."
Ja, sollte auch richtig sein (also syntaktisch und definiert) - aber auf keinen Fall gut...
#include <iostream> using namespace std; void setze(const char *&to_fill); int main() { const char* str; //Zum Bearbeiten setze(str); cout << str << endl; // Beenden des Programmes durch druecken einer Taste system("Pause"); } void setze(const char *&to_fill) { to_fill = "huhu"; }gefällt mir da schon wesentlich besser...
bb