Gast
#919619
Hi,
ich hab grade etwas Schwierigkeiten bei dem folgenden Problem:
Ich will in einer Funktion "strtol" aufrufen, damit der mir aus einem
String einen Long parst:
CControlView::ParseError CControlView::CheckInput(CString input, char*
endptr, LONG* value) {
endptr = 0;
if(input.GetLength() == 0)
return PARSE_ERROR_EMPTY;
*value = strtol(input, &endptr, 10);
TRACE("PARSE Test: %d, *error:%d\n", *value, *endptr);
if(*endptr != 0)
return PARSE_ERROR_NAN;
if(*value == LONG_MIN || *value == LONG_MAX)
return PARSE_ERROR_OVERFLOW;
if(*value < 0)
return PARSE_ERROR_NEGATIVE;
return PARSE_ERROR_OK;
}
Jetzt gibt mir strtol ja einen "Zeiger auf einen Zeiger auf einen char"
zurück der auf das Zeichen zeigt, das nicht numerisch ist.
Warum? Warum erwartet strtol nicht einfach einen Zeiger auf einen char,
in den es dann das Zeichen schreiben kann?
Und wie kann ich (durch Aufruf von CCOntrolView::CheckInput() dann auf
dieses fehlerhafte Zeichen zugreifen?
Für meinen "value" ist mir das klar:
char err;
LONG value;
CControlView::ParseError x = CheckInput(m_SNHigh, &err, &value);
Value wird einfach als Referenzparameter übergeben. Aber err?
Und wieso muss es doppelt verzeigert sein? Wie stellt man sich das vor?
Mfg
Jens