Ausgabe eines Char[] mit cout
-
Ich bin gerade dabei, C++ zu lernen...
Ich benutze die Bloodshed Dev-C++-Umgebung (Version 4.9.8.0)Folgendes Problem:
In einer Struktur (Teststruktur) habe ich eine Zeichenfolge (im Beispielcode: Name). Nun habe ich mehrere Teststrukturen in einem Array (TSAR) und jede Teststruktur hat einen anderen Namen. Ich möchte nun jeder Teststruktur einen Namen zuweisen und ihn danach wieder ausgeben.
typedef struct Teststruktur { char* Name; }Teststruktur; Teststruktur TSAR[15]; void main() { int Counter = 0; TSAR[0].Name = "Test1"; TSAR[1].Name = "Test2"; //usw... while(Counter > 15) { cout << TSAR[Counter].Name; Counter = Counter + 1; } }
Logischerweise gibts nun eine Zugriffsverletzung, da cout auf einen Zeiger und nicht auf die Daten zeigt. Trotzdem ist es die einzige Möglichkeit den Code ohne Fehler zu kompilieren. Nutze ich nur char und nicht char* bringt der Compiler immer "ISO-C++ forbids assignement of Arrays"
Kann mir jemand bei diesem Problem helfen ????
-
hm, wundert mich das cout überhaupt einmal ausgeführt wird
da:
[cpp]while(Counter /--->/>/<---/ 15)[/cpp]
(es sollte eigentlich "<" sein)ansonsten, würd ich dir zu std::strings raten, da diese weniger
fehleranfällig / leichter handzuhaben sind als cstrings.Zur Fehlermeldung:
ist auch klar da ein char nur ein einzelnes Zeichen ist, eine Zeichenkette dagegen aber ein Array von chars.
deshalb kannst du nur char[] bzw. char* verwenden.p.s. es ist "int main()"
-
mir fällt ausserdem auf das du nie mals einen speicher abbhebst ist das absicht?!
TSAR[0].Name = "Test1" //"Test1" ist nur temporär! //beeser TSAR[0].Name = malloc(strlen("Test1")); strcpy(TSAR[0].Name,"Test1");
mfg
-
Also, ich hab hier nicht mein Programm reinkopiert sondern einfach ein Beispiel reingeschrieben...
Könntest du mir eine Lösung aufschreiben, irgendwie bin ich zu dumm um eine char[]-Lösung so zu schreiben, die der Compiler auch normal kompiliert.
Meine Version (diesmal kopiert) funzt jedenfalls nicht:
#include <iostream> #include <stdlib.h> using namespace std; typedef struct Teststruktur { char Name[6]; }Teststruktur; Teststruktur TSAR[1]; int main() { int Counter = 0; TSAR[0].Name = "Test1"; TSAR[1].Name = "Test2"; while(Counter > 2) { cout << TSAR[Counter].Name << endl; Counter = Counter + 1; } system("Pause"); return 0; }
-
#include <iostream> #include <cstring> using namespace std; struct Teststruktur // typedef braucht man in c++ nichtmehr für structs, oder? { char Name[6]; }; Teststruktur TSAR[2]; // Die grösse des Arrays ist zwei, denn du hast zwei Elemente, Element 0 und Element 1. int main() { strcpy(TSAR[0].Name, "Test1"); // Du kannst keinem Array ein "" zuweisen, machs mit strcpy oder benutz std::strings kein char-Array strcpy(TSAR[1].Name, "Test2"); // s. oben for (int i=0; i < 2; ++i) { cout << TSAR[i].Name << endl; } system("Pause"); //return 0; musst du in der int main laut C++-Standard nicht schreiben. }
-
//EDIT: mist, war wohl zu langsam. Meine das selbe wie k1ro...
Gruß Kitty :xmas2:
-
k1ro schrieb:
typedef braucht man in c++ nichtmehr für structs, oder?
nein, braucht man nicht mehr seit c++ den gleich namespace für klassen, structs etc. verwendet.
[edit]
benutz std::string
ich finde es ja gut und richtig, dass die verwendung von std::string empfohlen wird, um solchen alten krankheiten und fehlern wie bufferoverflows einhalt zu gebieten. allerdings sollte man einsteiger in c++ imo ruhig mal mit char-arrays hantieren lassen, damit diese ganzen operationen nicht hinter einer wand von funktionen und überladenen operatoren verschwinden. jeder sollte vielleicht seine ersten kleinen programme mit diesen problemen geschrieben haben, und es sei es auch nur, um die nötige abmeigung gegenüber c-strings zu entwickeln.
[/edit]mfg
-
oder eben, mit den schönen bequemen strings:
#include <iostream> #include <string> using namespace std; int main() { TestString[0] = "Test1"; TestString[1] = "Test2"; for (int i=0; i < 2; ++i) { cout << TestString[i] << endl; } system("Pause"); }
aber vermutlich war dein ziel, "struct" kennenzulernen.. (war in diesem Fall jedoch ein schlechtes Beispiel, find ich)
-
Hab's mit strcpy gelöst. Ich werde mir aber auch noch die strings anschauen.
Danke für eure Hilfe....