исключение функции strcpy в консольной программе c ++

исключение в 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);
}

не могли бы вы помочь мне решить это?

-3

Решение

str2 неинициализированный указатель strcpy не выделяет память, поэтому в данный момент пытается записать на произвольный адрес, который вам не принадлежит и, скорее всего, не будет записан вашим кодом.

Вам нужно указать str2 в действительную память перед звонком strcpy,

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

Вы должны также free память позже в вашей программе

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

Другие решения

Проблема в том, что вы пишете в неинициализированную / случайную ячейку памяти, не инициализируя str2.

Первое решение:

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

Второе (лучшее решение): не используйте указатели в вашем коде, если вам не нужно:

std::string str2 = str1;

Также рассмотрите возможность использования std :: ostringstream для токенизации в std :: strings и преобразования в int.

0

По вопросам рекламы [email protected]