c_str()返回的结果为空,该怎么办?

bitbit47 2010-03-29 11:24:54
vector<string> idaresult(8)
for(int i = 0;i<8;i++)
{
cout<<idaresult[i].c_str()<<endl;//此值为空
cout<<idaresult[i]<<endl;//这样就能输出
}
请高手们指教,这事为什么呢?
...全文
432 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
bitbit47 2010-03-29
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 dubiousway 的回复:]
引用 10 楼 bitbit47 的回复:

引用楼主 bitbit47 的回复:
vector<string> idaresult(8)
for(int i = 0;i<8;i++)
{
cout<<idaresult[i].c_str()<<endl;//此值为空
cout<<idaresult[i]<<endl;//这样就能输出
}
请高手们指教,这事为什么呢?

声明……
[/Quote]
好吧,我贴出来,大家帮帮忙!
vector<string> idaresult = InformationDisperseString(N/2, N, idasource);
for(int i = 0;i<8;i++)
{
cout<<idaresult[i]<<endl;//能输出
cout<<idaresult[i].c_str()<<endl;//空值
}
//函数定义
vector<string> InformationDisperseString(int threshold, int nShares, string idasource)
{
assert(nShares<=1000);

ChannelSwitch *channelSwitch;

StringSource source(idasource, false, new InformationDispersal(threshold, nShares, channelSwitch = new ChannelSwitch));


string channel;
vector<string> vShares(nShares);
vector_member_ptrs<StringSink> stringSinks(nShares);

for (int i=0; i<nShares; i++)
{
string each;
vShares[i].assign(each);
stringSinks[i].reset(new StringSink(vShares[i]));
channel = WordToString<word32>(i);
stringSinks[i]->Put((byte *)channel.data(), 4);
channelSwitch->AddRoute(channel, *stringSinks[i],
BufferedTransformation::NULL_CHANNEL);
}
source.PumpAll();
return vShares;
}
linyongzuo 2010-03-29
  • 打赏
  • 举报
回复
我觉得你该检查哈容易,看下是不是存了个空值
stardust20 2010-03-29
  • 打赏
  • 举报
回复
写了个小程序试了下。。。两个都能输出相同的内容呀。。
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main()
{
vector<string> idaresult(8);
for (int i=0; i < 8; i++)
{
idaresult[i]="1232434";
}

for(int i = 0;i<8;i++)
{
cout<<idaresult[i].c_str()<<endl;//此值为空
cout<<idaresult[i]<<endl;//这样就能输出
}
return 0;
}
dubiousway 2010-03-29
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 bitbit47 的回复:]

引用楼主 bitbit47 的回复:
vector<string> idaresult(8)
for(int i = 0;i<8;i++)
{
cout<<idaresult[i].c_str()<<endl;//此值为空
cout<<idaresult[i]<<endl;//这样就能输出
}
请高手们指教,这事为什么呢?

声明一下:我已经给这个容器赋值好了,8个全部有内容!……
[/Quote]

程序都贴出来的好。

怎么赋的值,哪里赋的值?
bitbit47 2010-03-29
  • 打赏
  • 举报
回复
[Quote=引用楼主 bitbit47 的回复:]
vector<string> idaresult(8)
for(int i = 0;i<8;i++)
{
cout<<idaresult[i].c_str()<<endl;//此值为空
cout<<idaresult[i]<<endl;//这样就能输出
}
请高手们指教,这事为什么呢?
[/Quote]
声明一下:我已经给这个容器赋值好了,8个全部有内容!开始忘记告诉大家了,不好意思
yuzl32 2010-03-29
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 bitbit47 的回复:]
vector<string> idaresult(8)
...
用了c_str()后输出的内容应该和不用的时候相同啊,也就是说idaresult[i]里面有值,idaresult[i].c_……
[/Quote]
vector<string> idaresult(8);只是声明了vector并没有给它里面的内容赋值。
bitbit47 2010-03-29
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 tan625747 的回复:]
vector<string> idaresult(8)
for(int i = 0;i<8;i++)
{
cout<<idaresult[i].c_str()<<endl;//此值为空
cout<<idaresult[i]<<endl;//这样就能输出
}

idaresult[i].c_str()表示一个字符,楼主没有赋值
[/Quote]
事先已经赋值好了,容器里面的8个字符串全部有值
bsr2009 2010-03-29
  • 打赏
  • 举报
回复
没有初始化啊,这个值有可能空,也有可能是未知值。
tan625747 2010-03-29
  • 打赏
  • 举报
回复
vector<string> idaresult(8)
for(int i = 0;i<8;i++)
{
cout<<idaresult[i].c_str()<<endl;//此值为空
cout<<idaresult[i]<<endl;//这样就能输出
}

idaresult[i].c_str()表示一个字符,楼主没有赋值
bitbit47 2010-03-29
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 dubiousway 的回复:]
引用 2 楼 bitbit47 的回复:

引用 1 楼 dubiousway 的回复:

输出了什么?

空的,什么也没有啊


?? 没明白lz的意思。输出空的,不是正常吗。lz 的问题是什么?
[/Quote]
用了c_str()后输出的内容应该和不用的时候相同啊,也就是说idaresult[i]里面有值,idaresult[i].c_str()也应该有值啊,现在输出为空,不知道是怎么回事?
dubiousway 2010-03-29
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 bitbit47 的回复:]

引用 1 楼 dubiousway 的回复:

输出了什么?

空的,什么也没有啊
[/Quote]

?? 没明白lz的意思。输出空的,不是正常吗。lz 的问题是什么?
hartharthart 2010-03-29
  • 打赏
  • 举报
回复
是输出类型的原因吗
bitbit47 2010-03-29
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 dubiousway 的回复:]

输出了什么?
[/Quote]
空的,什么也没有啊
dubiousway 2010-03-29
  • 打赏
  • 举报
回复

输出了什么?
IranCyberArmy 2010-03-29
  • 打赏
  • 举报
回复
#include <iostream.h>
#include <vector.h>
#include <string>
#include <math.h>
using namespace std;

int main(int argc, char *argv[])
{
vector<string> idaresult(8);
char s[10];
for(int i = 0;i<8;i++)
{
idaresult[i] = itoa(i, s, 10);

}
for(int i = 0;i<8;i++)
{
cout<<idaresult[i].c_str()<<endl;//此值为空
cout<<idaresult[i]<<endl;//这样就能输出
}
return 0;
}


一切正常
dubiousway 2010-03-29
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 bitbit47 的回复:]

引用 11 楼 dubiousway 的回复:
引用 10 楼 bitbit47 的回复:

引用楼主 bitbit47 的回复:
vector<string> idaresult(8)
for(int i = 0;i<8;i++)
{
cout<<idaresult[i].c_str()<<endl;//此值为空
cout<<idaresult[i]<<endl;//这样就能输……
[/Quote]

..
vector_member_ptrs
不懂
帮你up
  • 打赏
  • 举报
回复

楼主
如果 vector<string> svec;
svec.push_back("123212");

cout << svec[0].c_str()这样输出没问题

64,647

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧