c++ - Vector print out wrong value -
hi got question following code. copy char string, read out of file vector , print out vector on screen. program copy string out ouf textfile vector gives out last element of vector. did wrong here?? :
#include <fstream> #include <stdio.h> #include <stdlib.h> #include <iostream> #include <string.h> #include <sstream> #include <vector> #include "mbusread.h" using namespace std; int main() { int dev_nr; int anzahl; ifstream addr; string buffer; string dev_no; stringstream devss; char *reg_no_c = new char [buffer.length()+1]; char *start_reg_c = new char [buffer.length()+1]; char *adresse_c = new char [buffer.length()+1]; char *id_c = new char [buffer.length()+1]; char *zeit_c = new char [buffer.length()+1]; addr.open("addr.xml", ios::in); //addressendatei auslesen //anzahl suchen { getline(addr, buffer); } while(strcmp (buffer.c_str(), "<anzahl>")!=0); getline(addr, buffer); stringstream bufferss(buffer); bufferss >> anzahl; anzahl++; vector<const char *> ip(anzahl); vector<const char *> start_reg(anzahl); vector<const char *> reg_no(anzahl); vector<const char *> id(anzahl); vector<const char *> zeit(anzahl); for(dev_nr=1;dev_nr<anzahl;dev_nr++) { addr.seekg(ios::beg); devss << "<dev" << dev_nr << ">"; dev_no = devss.str(); devss.str(""); devss.clear(); { getline(addr, buffer); if(addr.eof()) { break; } } while (strcmp (buffer.c_str(),dev_no.c_str()) != 0); // ip suchen { getline(addr, buffer); }while(strcmp (buffer.c_str(), "<ip>")!=0); getline(addr, buffer); if(addr.eof()) { break; } strcpy(adresse_c, buffer.c_str()); // ip einlesen ip[dev_nr - 1] = adresse_c; cout << ip[dev_nr - 1] << endl; // start_reg suchen { getline(addr, buffer); }while(strcmp(buffer.c_str(), "<start_reg>")!=0); if(addr.eof()) { break; } getline(addr, buffer); //schreibt startregister in daten strcpy(start_reg_c, buffer.c_str()); // ip einlesen start_reg[dev_nr - 1] = start_reg_c; cout << start_reg[dev_nr - 1] << endl; // reg_no suchen { getline(addr, buffer); }while(strcmp(buffer.c_str(), "<reg_no>")!=0); if(addr.eof()) { break; } getline(addr, buffer); //schreibt die anzahl der ausgelesenen register in daten strcpy(reg_no_c, buffer.c_str()); // ip einlesen reg_no[dev_nr - 1] = reg_no_c; cout << reg_no[dev_nr - 1] << endl; // id suchen { getline(addr, buffer); }while(strcmp(buffer.c_str(), "<id>")!=0); if(addr.eof()) { break; } getline(addr, buffer); //schreibt die id des sensors in daten strcpy(id_c, buffer.c_str()); // ip einlesen id[dev_nr - 1] = id_c; cout << id[dev_nr - 1] << endl; { getline(addr, buffer); }while(strcmp(buffer.c_str(), "<time>")!=0); if(addr.eof()) { break; } getline(addr, buffer); strcpy(zeit_c, buffer.c_str()); // ip einlesen zeit[dev_nr - 1] = zeit_c; cout << zeit[dev_nr - 1] << endl; } for(int = 0; < anzahl; i++) { cout << "ip " << ip[i] << endl; cout << "id " << id[i] << endl; cout << "start_reg " << start_reg[i] << endl; cout << "reg_no " << reg_no[i] << endl; cout << "zeit " << zeit[i] << endl; } }
your problem starts right @ top of code
string buffer; string dev_no; stringstream devss; char *reg_no_c = new char [buffer.length()+1]; char *start_reg_c = new char [buffer.length()+1]; char *adresse_c = new char [buffer.length()+1]; char *id_c = new char [buffer.length()+1]; char *zeit_c = new char [buffer.length()+1];
a point buffer
empty, length()
returns 0 , allocate single byte c strings.
Comments
Post a Comment