push_back Funktion funktionniert nicht
-
Hallo,
Ich habe ein Problem, ich habe mir eine Struktur gebaut die wie folgt aussieht:
struct data{ int type; int id; std::vector<std::string> scalar_name }; data RtrnData;Ich habe auch die Include-Dateien <vector>, <iostream>, <string> eingefügt.
Doch wenn ich nun in meinen Programm die Push_back Funktion benutze will, passiert gar nix, er schreibt nix in meinen Vector.RtrnData.scalar_value.push_back("test"); <- das wird nicht korrekt ausgeführt da in meinem Vector immer NULL steht aber nicht testVielen Dank für ihre Hilfe
Claude
-
Und du stellst wie fest, dass da NULL steht?
Lars
-
Heißt der Vector jetzt scalar_name oder scalar_value?
ClaudeG schrieb:
er schreibt nix in meinen Vector.
Das folgerst du woraus?
ClaudeG schrieb:
da in meinem Vector immer NULL steht
Das stellst du wie fest?
Zeig doch mal ein kompilierbares Minimalbeispiel, das den Fehler reproduziert. Vermutlich ist das Problem eher beim Ausgeben des Vectorinhalts als beim Einfügen.
-
struct data { int type; int id; std::vector<std::string> scalar_name; }; ... int main() { data RtrnData; RtrnData.scalar_name.push_back("test"); vector<string>::iterator it; for ( it=RtrnData.scalar_name.begin() ; it < RtrnData.scalar_name.end(); ++it ) cout << " " << *it; return 0; }liefert sicherlich 'test'. Was ist bei dir anders?
-
Im Vector kann nicht NULL stehen, denn NULL ist ein Zeiger. Im Vector speicherst du aber std::string und keine Zeiger.
-
Also ich habe die push_back funktion genutzt, und dann wollte ich mit printf den Inhalt meines Vector anzeigen, dachte dass das Funktionniert da es sich um ein string handelt und somit printf("%s"); funktionieren müsste, doch dann bekomme ich als antwort <NULL>, darum habe ich angenommen dass im Vector sich nichts befindet denn in meinen Programm benutz ich die Funktion um die Länge des Vectors zu bekommen da bekomme ich immer null als Resultat so muss etwas nicht stimmen
-
ClaudeG schrieb:
Also ich habe die push_back funktion genutzt, und dann wollte ich mit printf den Inhalt meines Vector anzeigen, dachte dass das Funktionniert da es sich um ein string handelt und somit printf("%s");
%s erwartet einen char-Zeiger. Zeig doch bitte mal den Code, da scheint so einiges schief zu laufen.
-
printf stammt noch aus C Zeiten.. Damals gab es keine std::string-s. Bei %s musst du einen C-String (char-Zeiger) übergeben, keinen std::string.
Wegen genau solchen Sachen soltest du printf nicht nutzen - es ist nicht Typsicher. Du übergibst einen vollkommen falchen Typ und merkst es nicht einmal.
std::cout << std::string("Hello World!") << std::endl;
-
ClaudeG schrieb:
Also ich habe die push_back funktion genutzt, und dann wollte ich mit printf den Inhalt meines Vector anzeigen, dachte dass das Funktionniert da es sich um ein string handelt und somit printf("%s"); funktionieren müsste, doch dann bekomme ich als antwort <NULL>, darum habe ich angenommen dass im Vector sich nichts befindet denn in meinen Programm benutz ich die Funktion um die Länge des Vectors zu bekommen da bekomme ich immer null als Resultat so muss etwas nicht stimmen
Zeig doch mal bitte ein richtiges Beispiel aus deinem Code.
Vermutlich hast du printf einen falschen Parameter übergeben.
Welche Funktion um die Länge des vectors zu bestimmen benutzt du denn? size() wäre die richtige.
-
Also hier ein Auschnitt aus meinen Programm:
// fin ist ein std::ifstream fin.open(filename, std::ios::in); char *ch_ptr; char scalar_names[256]; // names in one line fin.getline(scalar_names, 255); // first token #ifndef WIN32 ch_ptr = strtok(scalar_names,"# "); #else char * next_token; ch_ptr = strtok_s(scalar_names,"# ", &next_token); #endif // insert into vector if ( ch_ptr != NULL ) RtrnData.scalar_name.push_back(std::string(ch_ptr)); // den ch_ptr hat den richtigen Wert, den printf("%s", ch_ptr); zeigt mir ihn an. #endif // indicate scalar value to be displayed int i = 0; int found = 0; std::string scalar_display; unsigned long scalar_display_long; while ( i < RtrnData.scalar_name.size() ) { // Rechnung die noch gemacht werden müssen, sowie auch noch weitere Parameter aus der Datei auslesen, doch in diesen Loop komme ich nie }Ich hoffe es ist jetzt klarer, denn ich kann keinen Syntax Fehler erkennen, denn die Datei bekomme ich ja auch gebaut! Aber die Ausführung klappt nicht wie ich will
-
Kannst du bitte den Haken bei "BBCode in diesem Beitrag deaktivieren" entfernen?
ClaudeG schrieb:
Also hier ein Auschnitt aus meinen Programm:
// fin ist ein std::ifstream fin.open(filename, std::ios::in); char *ch_ptr; char scalar_names[256]; // names in one line fin.getline(scalar_names, 255); // first token #ifndef WIN32 ch_ptr = strtok(scalar_names,"# "); #else char * next_token; ch_ptr = strtok_s(scalar_names,"# ", &next_token); #endif // insert into vector if ( ch_ptr != NULL ) RtrnData.scalar_name.push_back(std::string(ch_ptr)); // den ch_ptr hat den richtigen Wert, den printf("%s", ch_ptr); zeigt mir ihn an. #endif // indicate scalar value to be displayed int i = 0; int found = 0; std::string scalar_display; unsigned long scalar_display_long; while ( i < RtrnData.scalar_name.size() ) { // Rechnung die noch gemacht werden müssen, sowie auch noch weitere Parameter aus der Datei auslesen, doch in diesen Loop komme ich nie }Ich hoffe es ist jetzt klarer, denn ich kann keinen Syntax Fehler erkennen, denn die Datei bekomme ich ja auch gebaut! Aber die Ausführung klappt nicht wie ich will
und kannst du bitte compilier-baren quellcode posten?
oder zumindest quellcode, wo man versteht, was du machen möchtest (als tip: zähl mal die #endifs im vergleich zu deinen #ifs / #ifdefs / #ifndefs)die einrückung sieht auch so aus, als ob du aus verschiedenen funktionen einfach nur blind rauskopiert hättest und dich jetzt wunderst...
bb