- 论坛徽章:
- 0
|
希望通过map对象将配置文件保存在内存中并方便调用
首先我定义了这样一个容器
map<string,string> config_file;
然后通过ifstream读取配置文件并进行解析,然后保存到config_file容器中
类似下面这样
config_file["datafile"] = "config.ini";
接着再次调用ifstream并传入参数config_file["datafile"].c_str()
即
- ifstream sdata(config_file["datafile"].c_str());
复制代码 结果是使用sdata什么也读不出来,就是说无法读出文件内容,和
效果一样,好象config_file["datafile"].c_str()没有值或者值不是"config.ini"似的
然而我在后面
- cout<<config_file["datafile"].c_str()<<endl;
复制代码 确明白无误的输出了"config.ini"
而如果是普通的字符串指针则完全没有问题,如
char *file = "config.ini"
ifstream sdata(file);
或者普通的string对象也正常
string abc = "config.ini";
const char* newabc = abc.c_str();
ifstream sdata(newabc);
所以就有三个疑问:
1,以map作为容器的string对象是不是有些特殊? ifstream sdata(config_file["datafile"].c_str());这种使用方式是不是不正确?
不知道是不是跟我定义map容器方式有关系? 我是这样对其元素赋值的
将上述的config_file作为指针传入一个解析配置文件的函数
parse(&config_file){
//在其中这样赋值
string var = "datafile";
string val = "config.ini";
(*config_file)[var] = val;
}
2,另外查了一下资料,听说c_str()好象有只能使用一次的说法?
但我测试
const char* abc = config_file["datafile"].c_str();
cout<<abc<<endl;
cout<<abc<<endl;
cout<<abc<<endl;
连续输出几变都没什么问题,不知具体是怎么回事?
3,想问一下linux下gdb针对这种情况有没有什么调试的方法?
用linux时间不短了,gdb基本没用过..还请大家不吝赐教,比如如何断在ifstream sdata(newabc);这里并查看newabc的值和其对应地址的内存?
非常感谢!!
[ 本帖最后由 deadcat 于 2007-5-18 12:15 编辑 ] |
|