为什么这段程序会崩溃呢
```c++
#include
#include
using std::string;
struct ROLE
{
string id;
int exp;
};
int main()
{
int count=0;
int s_begin_id=0;
int s_end_0=0;
string strData="id=tonyclare;exp=9532;id=sunny;exp=4214;id=simplle;exp=2134;id=tom;exp=234;";
for (int i=0;iif (strData[i]==';')
{
count++;
}
}
count=count/2;
struct ROLE *pRole=new ROLE[count];
for (int i=0;is_begin_id=strData.find("id=",s_begin_id);
int s_end_0=strData.find(";",s_begin_id);
string strOut_id=strData.substr(s_begin_id+3,s_end_0-s_begin_id-3);
pRole[i].id=strOut_id;
s_begin_id=s_begin_id+3;
std::cout<"pause");
return 0;
}
```
int s_begin_id=strData.find("id=",s_begin_id);
int s_end_0=strData.find(";",s_begin_id);
这两行错了啊, 这两个变量在main开头部分已经定义了,这里不要再定义一次啊,去掉开头的int就好了
在此程序中,使用了一个指向结构体数组的指针,但是在为指针分配内存时,没有使用 [] 运算符,导致分配的内存不足,因此程序会崩溃。另外,在字符串中查找子字符串时,需要注意起始位置的设置,否则可能会出现错误的结果。
以下是修改后的代码:
#include <iostream>
#include <string>
using std::string;
struct ROLE
{
string id;
int exp;
};
int main()
{
int count = 0;
int s_begin_id = 0;
int s_end_0 = 0;
string strData = "id=tonyclare;exp=9532;id=sunny;exp=4214;id=simplle;exp=2134;id=tom;exp=234;";
for (int i = 0; i < strData.length(); i++)
{
if (strData[i] == ';')
{
count++;
}
}
count = count / 2;
struct ROLE* pRole = new ROLE[count]; // 为指针分配内存时使用 [] 运算符
for (int i = 0; i < count; i++)
{
int s_begin_id = strData.find("id=", s_begin_id);
int s_end_0 = strData.find(";", s_begin_id);
string strOut_id = strData.substr(s_begin_id + 3, s_end_0 - s_begin_id - 3);
pRole[i].id = strOut_id;
s_begin_id = s_end_0 + 1; // 修改起始位置
std::cout << pRole[i].id << std::endl;
}
delete[] pRole; // 在程序结束时释放指针所指向的内存
system("pause");
return 0;
}