指针迭代器异常,高分求助!!!

jeffio 2011-02-17 04:42:34
下面的code是想把迭代器中的值拼接成字符串显示出来,结果程序运行一段后就在拼接时候抛出异常,请大虾们帮忙该如何改进啊!!!

typedef std::vector<_variant_t*>::iterator CVariantVectorIter;

TCHAR Output[5000];
const char *dollar = "$";
const char *wave = "~";
for (CVariantVectorIter col = row->begin(); col != row->end(); col++, col_index++)
{
entryNum2 =1;
if ((*col) != NULL)
{
entryNum2 = 2;
strcat(Output, (char*)(_bstr_t)(*col));
strcat(Output, dollar);

//pFastLoader->SetColumnValue(col_index, (*col));
}
else
{
strcat(Output, wave);
strcat(Output, dollar);
}
}
...全文
79 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
jeffio 2011-03-02
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 yizhili 的回复:]
_variant_t 没用过,但我搜了一下好像可以存整形啊、字符串之类的不同类型数据的吧?
那么它的类型转换时怎么做的?如果里面存的不是字符串会怎么处理?
这些都是有可能出错的地方吧


引用 9 楼 jeffio 的回复:

*col是_variant_t类型啊,看指针迭代器的定义就知道了。。。

类型转换怎么就会异常呢???

有没有别的好方法啊???
[/Quote]

还是没有解决啊。。。
大虾们都忙什么呢??没有人遇到这样的问题么?
yizhili 2011-02-21
  • 打赏
  • 举报
回复
_variant_t 没用过,但我搜了一下好像可以存整形啊、字符串之类的不同类型数据的吧?
那么它的类型转换时怎么做的?如果里面存的不是字符串会怎么处理?
这些都是有可能出错的地方吧

[Quote=引用 9 楼 jeffio 的回复:]

*col是_variant_t类型啊,看指针迭代器的定义就知道了。。。

类型转换怎么就会异常呢???

有没有别的好方法啊???
[/Quote]
jeffio 2011-02-21
  • 打赏
  • 举报
回复
*col是_variant_t类型啊,看指针迭代器的定义就知道了。。。

类型转换怎么就会异常呢???

有没有别的好方法啊???
yizhili 2011-02-18
  • 打赏
  • 举报
回复
那问题就是在类型转换里了

*col 里的内容确实是字符串吗?
*col 里的字符串内容正确吗?(比如漏了\0什么的)

先检查一下这两点

[Quote=引用 6 楼 jeffio 的回复:]

引用 5 楼 yizhili 的回复:
stringstream stream;

然后这个 stream 就可以像 cout 一样用了,比如:

stream << "test" << "$";

最后再用 stream.str() 得到拼接结果(std::string 类型)


关键是要把那个指针迭代器中的value转换成字符串,然后才能拼接!怎么能不抛异常呢?
[/Quote]
jeffio 2011-02-18
  • 打赏
  • 举报
回复
高手那里去了啊。。。
jeffio 2011-02-18
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 yizhili 的回复:]
stringstream stream;

然后这个 stream 就可以像 cout 一样用了,比如:

stream << "test" << "$";

最后再用 stream.str() 得到拼接结果(std::string 类型)
[/Quote]

关键是要把那个指针迭代器中的value转换成字符串,然后才能拼接!怎么能不抛异常呢?
yizhili 2011-02-17
  • 打赏
  • 举报
回复
stringstream stream;

然后这个 stream 就可以像 cout 一样用了,比如:

stream << "test" << "$";

最后再用 stream.str() 得到拼接结果(std::string 类型)
jeffio 2011-02-17
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 yizhili 的回复:]
那么会不会 Output 大小不够?
*col 里面实际不是字符串?或者没有 '\0' 结尾?

另外建议试用一下 stringstream 代替 Output 和 strcat,C 原生的字符串太容易出问题了
[/Quote]

不知能否给个具体例子参考参考??
yizhili 2011-02-17
  • 打赏
  • 举报
回复
那么会不会 Output 大小不够?
*col 里面实际不是字符串?或者没有 '\0' 结尾?

另外建议试用一下 stringstream 代替 Output 和 strcat,C 原生的字符串太容易出问题了
jeffio 2011-02-17
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 yizhili 的回复:]
是不是 Output 没有设置成空字符串的原因?


C/C++ code
TCHAR Output[5000] = "";
[/Quote]

每次循环之前都memset了。。。
yizhili 2011-02-17
  • 打赏
  • 举报
回复
是不是 Output 没有设置成空字符串的原因?

TCHAR Output[5000] = "";

7,540

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 VC.NET
社区管理员
  • VC.NET社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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