矢量打印出错误的值
Vector print out wrong value
你好,我有一个关于以下代码的问题。我将复制一个字符字符串,我从一个文件中读取到一个向量,并在屏幕上打印出这个向量。程序将字符串复制出文本文件,但vector只给出vector的最后一个元素。我哪里错了?:
#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
do //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();
do {
getline(addr, buffer);
if(addr.eof())
{
break;
}
} while (strcmp (buffer.c_str(),dev_no.c_str()) != 0);
do // 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;
do // 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;
do // 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;
do // 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;
do
{
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 i = 0; i < 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;
}
}
不是真正的答案,但我的意见是您应该真正学习如何读取xml文件。你的代码是如此复杂,尽管它真正做的只是试图"破解解析"一个xml文件,许多人会觉得不值得尝试去纠正它。
-
Xerces是最著名的c++ XML Api,尽管它是一个巨大的库。下面是一个带有xerces DOM阅读的示例:http://xerces.apache.org/xerces-c/program-dom-2.html
-
如果xerces是一个太大的库,为什么不尝试TinyXML:查看这里的示例:http://www.grinninglizard.com/tinyxmldocs/tutorial0.html
你的问题从代码的顶部开始
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];
此时buffer
为空,因此length()
返回0,并且仅为C字符串分配单个字节。
相关文章:
- 分段错误当我试图运行程序时出错
- .h 和.cpp文件分离时出错,但仅使用 .h 文件时没有错误.我做错了什么?
- 创建 OpenCV 非自由版本 v4.3 时出错,可折叠.cpp错误 C2039、2605
- 制作时出错,C++"db.c:2127:错误:在"||"标记之前应使用";"
- C++语法错误,编译器不会警告或 int v = func(&v) 出错;
- 在VS2015中访问类成员时运行时错误,但在Linux上未访问时出错
- 如何更改路径以修复错误"./main:加载共享库 libmkl_core.so 时出错?
- 为什么在定义类之前声明类的对象会在友元类中给出错误,而在友元函数中不会出错
- 安装 mply 库时出错.致命错误:gsl/gsl_sf.h:没有这样的文件或目录
- Rcpp/C++/R:比较日期时间矢量与日期时间时出错(错误:"运算符>"的不明确重载)
- 编译特征程序时出错:错误:'seq'不是'Eigen'的成员
- 可能的 GCC 链接器错误会导致将弱符号和局部符号链接在一起时出错
- 非标准语法;使用 '&' 创建指向成员的指针错误,将成员函数分配给向量时出错
- 为 freebsd 11 编译 gcc4.8.5 时出错: 错误: 未知类型名称 'choke'
- 运算符重载时出错(错误:"运算符<<不匹配(操作数类型为"std::basic_ostream<char>"和"const char [2]")
- 我同时使用了莱布尼茨和瓦利斯公式来估算π但输出数字错误,我不知道我哪里出错了
- 显示错误消息框时出错.我该如何显示它
- 使用 swig 时出错:输入 (1) 中的语法错误
- 编译类 C++ 中的线程时出错(错误 xthread)
- 在 Visual Studio 2015 社区中消除错误时出错