**pointer nach übergabe an eine Funktion gekürzt ?
-
Juhu, habe (wie immer) ein Problem, und zwar hab ich ein char array erstellt in einer funktion, übergebe dieses an die Main funktion und gebe es dann an eine andere Funktion um diese zu verarbeiten. Wenn ich die Funktion heraus nehme und direkt in die Main funktion schreibe funktioniert alles, wenn ich allerdings den Wert an die Funktion übergebe ist nach Datenelement [7][0] schluss. Kann soetwas verlorengehen und wenn ja, wie verhindere ich das ?
void printHouseNames(char**) void printHouseNames(char** getBuildings) { cout << "\n\nFolgende Gebaeude sind errichtet:\n\n\n"; int i; for(i = 0;i<=10;i++) { if(*(getBuildings + (i * 6)) == "1") { cout << "\nName: " << *(getBuildings + (i * 6) + 2) << " (Stufe " << *(getBuildings + (i * 6) + 1) << ")"; } } } //--> und das steht inner main char **getBuildings = getTechTree(getMainContent); printHouseNames(getBuildings);
Wenn ich das so
char **getBuildings = getTechTree(getMainContent); // printHouseNames(getBuildings); cout << "\n\nFolgende Gebaeude sind errichtet:\n\n\n"; int i; for(i = 0;i<=10;i++) { if(*(getBuildings + (i * 6)) == "1") { cout << "\nName: " << *(getBuildings + (i * 6) + 2) << " (Stufe " << *(getBuildings + (i * 6) + 1) << ")"; } } cout << "\n\n"; wsaClose(testSock);
mache in der Main funktioniert alles. Hülfe
Edit:
Das mehdim. array sieht so aus:
char *backArray[11][6] = { // 1 2 3 4 5 6 { "0","0","Haupthaus","0","0","0"}, { "0","0","Goldmine","0","0","0"}, { "0","0","Steingrube","0","0","0"}, { "0","0","Saegewerk","0","0","0"}, { "0","0","Werkstatt","0","0","0"}, { "0","0","Kaserne","0","0","0"}, { "0","0","Hafen","0","0","0"}, { "0","0","Speicher","0","0","0"}, { "0","0","Steinmauer","0","0","0"}, { "0","0","Wachturm","0","0","0"} };
-
void printHouseNames(char** getBuildings) { ... } -------------- *(getBuildings + (i * 6)) == "1"
das funktioniert nicht
void printHouseNames(char[][6] getBuildings) { ... } -------------- *(getBuildings + (i * 6)) == '1'
würde gehen.
der name getBuilding lässt auf eine funktion schließen, nenn es doch einfach buildings.
ich glaube was du eigentlich suchst ist:
std::vector< std::string > buildings
void printHouseNames(std::vector< std::string > &buildings) { cout << "\n\nFolgende Gebaeude sind errichtet:\n\n\n"; for(int i = 0; i<=10; i++) { if(buildings[i][0] == "1") { cout << "\nName: " << buildings[i][2] << " (Stufe " << buildings[i][1] << ")"; } } } ... std::vector< std::string > buildings = getTechTree(getMainContent); printHouseNames(buildings);
so siehts doch auch gleich viel schöner aus!
edit: so.. noch schnell nen fehler rausgemacht
-
Das war nicht so ganz, was ich gesucht habe.... wie gesagt mit "1" funktioniert es, mit '1' klappts nicht.
-
Puh, das ist ziemlich komplizierte Zeigerarithmetik. Mach das bitte ganz schnell weg, es ist fürchterlich. Dereferenziere doch einfach mit []!
Und wenn du einen String mit einem String vergleichst, wird die Adresse verglichen, nicht der Wert (das nur mal so als Anmerkung). Ich blicks irgendwie trotzdem nicht ganz, entferne diese Zeigerarithmetik, dann wird man dir vielleicht besser hilfestellung geben können.
Übrigens, wenn du ein Zweidimensionales Array übergeben willst, übergib besser ein eindimensionales (in welches das zweidimensionale reinkopiert wurde) und indiziere dann entsprechend.
-
Das war nicht so ganz, was ich gesucht habe....
probier doch mal die variante mit std::vector und std::string, ich bin mir sicher sie funktioniert. (hab grad noch nen fehler raus gemacht
)
wie gesagt mit "1" funktioniert es, mit '1' klappts nicht.
klar.. fehlermeldungen bekommste bei beiden nicht. nur vergleicht deine variante nicht den inhalt der variable sondern die speicheradresse. ich bezweifle das du das möchtest.