исключение в strcpy ();
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
не выделяет память, поэтому в данный момент пытается записать на произвольный адрес, который вам не принадлежит и, скорее всего, не будет записан вашим кодом.
Вам нужно указать str2
в действительную память перед звонком strcpy
,
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 :: strings и преобразования в int.