关于list的简单使用

jguon 2011-05-31 02:35:51
如下:
list<char*> myList;
char* data = "1234567890";

for(int i = 0; i < 5; i++)
{
char d[3];
memset(d, 0, StrLen(d));
strncpy(d, &data[i*2], 2);
d[2 + 1] = '\0';
myList.push_back((char*)d);
}

我想得到结果很简单,就是data里面每两位push到list里面,
但是现在我最后得到的myList里面所有的item都是一样的...
小弟新手请大家多多指教
...全文
107 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
jguon 2011-06-03
  • 打赏
  • 举报
回复
谢谢, 结贴先, 我也不是很懂, 反正乱七八糟改了改, 现在多次测试正常了, 就是都不知道原因, 我现在做这东西,都是一点点实验调试测试出来的, 哎!自己做出来了,都不知道什么意思
CppFile 2011-06-02
  • 打赏
  • 举报
回复
也可以在new的时候,把长度改大一点,比如new char[len+1],len 就是参数的长度
CppFile 2011-06-02
  • 打赏
  • 举报
回复
参数非常大,超过了4096,当然会报错了

这么长的字符串,还是用AnsiString 吧
jguon 2011-06-02
  • 打赏
  • 举报
回复
现在又遇到一个问题就是当GetListByData(char* data)里面的参数长度非常大的时候,运行的时候就会报错, 我改小一点又好了

调试的时候弹出的Debugger Fault Notification如下:
Project c:\users\........test.exe faulted with message:'access violation at 0x0x12c9709:write of address 0x3c356631'.Process Stopped.Use Step or Run to continue.
jguon 2011-06-02
  • 打赏
  • 举报
回复
我大致理解了点你的意思:如果这样写char* d = new char[4096];那么声明周期又是怎么说的呢
[Quote=引用 1 楼 jguon 的回复:]

全部代码贴出来如下:
C/C++ code
list<char*> __fastcall TCommon::GetListByData(char* data)
{
list<char*> myList;
int len = 400;
int length = StrLen(data);

int count = length/len;……
[/Quote]
CppFile 2011-06-02
  • 打赏
  • 举报
回复
list<char*> myList;


return myList;

myList的生存期只到函数的括号完毕,你返回这么一个变量是很危险的,myList应该定义为全局变量或者类的成员函数
jguon 2011-06-02
  • 打赏
  • 举报
回复
非常感谢你的回答, 不过你可能没有看明白代理, 里面的4096是和参数没有多大的关系的, 这个函数的作用就把参数分割成多个char*并且放入到list里面, 现在我用new已经解决了问题, 小数据量得时候能正常运行了, 但是大数据量的时候,这个函数执行完全正常,就是运行return 时就报错了,不知道是不是和我电脑的内存有关,20多k的参数传入时出现的问题, 有时又会成功,单几率很小
[Quote=引用 7 楼 cppfile 的回复:]

参数非常大,超过了4096,当然会报错了

这么长的字符串,还是用AnsiString 吧
[/Quote]
开始领悟 2011-05-31
  • 打赏
  • 举报
回复
干嘛用char* 用list<AnsiString> myList;也可以啊
CppFile 2011-05-31
  • 打赏
  • 举报
回复
另外,你的list里放的是char *指针,你没有初始化,所以你pushback的时候,指针指向的是d的地址,这个是堆栈地址,生存周期到括号完毕,所以你这样是错误的

CppFile 2011-05-31
  • 打赏
  • 举报
回复
memset(d, 0, StrLen(d)); ->memset(d,0,sizeof(d));
jguon 2011-05-31
  • 打赏
  • 举报
回复
全部代码贴出来如下:
list<char*> __fastcall TCommon::GetListByData(char* data)
{
list<char*> myList;
int len = 400;
int length = StrLen(data);

int count = length/len;

for(int i = 0; i < count; i++)
{
char d[4097];
memset(d, 0, StrLen(d));
strncpy(d, &data[i*len], len);
d[len + 1] = '\0';
myList.push_back((char*)d);
}

if (length%len != 0)
{
char d[4097];
memset(d, 0, StrLen(d));
strncpy(d, &data[count * len], length - count * len);
d[len + 1] = '\0';
myList.push_back((char*)d);
}

return myList;
}

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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