c++控制台程序中strcpy函数的异常.strcpy()中的

exception of strcpy function in c++ console program

本文关键字:strcpy 异常 中的 函数 控制台 程序 c++      更新时间:2023-10-16

异常;

void recid(string str,int *begin, int *end)
{
  char *f,*str2;
  const char c1[2]=":",c2[2]="-";
  strcpy(str2,str.c_str());
  f=strtok(str2,c1);
  f=strtok(NULL,c2);
  *begin=atoi(f);
  f=strtok(NULL,c2);
  *end=atoi(f);
}

你能帮我解决吗?

str2是一个未初始化的指针。strcpy不分配内存,因此当前正在尝试写入您不拥有的任意地址,并且很可能您的代码无法写入该地址。

在调用strcpy之前,您需要将str2指向有效内存。

str2 = (char*)malloc(str.size()+1);
strcpy(str2,str.c_str());

您还应该稍后在程序中free内存

free(str2); // cannot dereference str2 after this point

问题是您在未初始化/随机内存位置中通过不初始化str2进行写入。

第一个解决方案:

str2 = new char[str.size() + 1];
strcpy(str2, str.c_str());
...
delete[] str2.

第二(更好的解决方案):除非迫不得已,否则不要在代码中使用指针:

std::string str2 = str1;

另外,考虑使用std::ostringstream将标记化为std::string并转换为int。