Non riesco a capire il perché di tutto quel casino... basta fare così:
codice:
CString stringa="79,2";
int campo=0;
int ber=0;
if (stringa.Find(_T(','))
    _stscanf(stringa, "%d,%d", &campo, &ber);
Il tuo codice è un gran pasticcio: ti segnalo un paio di errori:
codice:
char* str = (char *) (LPCTSTR) temp;  // per fare il cast da CString a char*
Poiché con le massime probabilità stai lavorando in Unicode (visto che poi usi L",") un cast di questo genere non si può fare. In questo modo aggiri i warning del compilatore facendo il cast (errato) in più passi, ma questo non toglie che sia errato (dovresti usare una variabile const wchar_t *, o meglio ancora const TCHAR *, per mantenere la portabilità ANSI/UNICODE).
codice:
delete[] str;
Il puntatore restituito da CString.operator PCXSTR() (che richiami convertendo la stringa in LPCTSTR, tipo di dati che corrisponde a CString::PCXSTR, ossia const TCHAR *, ossia, in Unicode, const wchar_t *) punta direttamente alla memoria dove l'oggetto CString memorizza i caratteri e non va toccato, se non in lettura.
codice:
sscanf
Poiché operi in Unicode la sscanf non va bene (è pensata per lavorare in ANSI); devi usare la swscanf o, meglio la _stscanf, che, come CString, diventa ANSI o Unicode a seconda che sia definita o meno la macro _UNICODE.