4 Stimmen

Atoi() Konvertierungsfehler

Atoi() gibt mir diesen Fehler:

Fehler C2664: "atoi": kann Parameter 1 nicht von 'char' in 'const char *' konvertieren
        Die Konvertierung vom integralen Typ in den Zeiger-Typ erfordert reinterpret_cast, C-Style-Cast oder Funktionsstil-Cast

auf dieser Zeile: int pid = atoi( token.at(0) ); wobei token ein Vektor ist

Wie kann ich das umgehen?

12voto

Paige Ruten Punkte 164391

Token.at(0) gibt ein einzelnes Zeichen zurück, aber atoi() erwartet einen String (einen Zeiger auf ein Zeichen). Wandeln Sie entweder das einzelne Zeichen in einen String um, oder um ein einzelnes Ziffernzeichen in die Zahl umzuwandeln, die es darstellt, können Sie normalerweise einfach dies tun:

int pid = token.at(0) - '0';

* Die Ausnahme ist, wenn der Zeichensatz die Ziffern 0-9 nicht in aufsteigender Reihenfolge kodiert, was äußerst selten ist.

4 Stimmen

Jede Ausnahme wäre ebenfalls nicht konform. Der C++ Standard [lex.charset] schreibt vor, dass '0' - '9' aufeinander folgende numerische Werte haben.

4voto

Jason Etheridge Punkte 6741

Sie müssen einen String erstellen:

int pid = atoi(std::string(1, token.at(0)).c_str());

... vorausgesetzt, dass token ein std::vector von char ist und den Konstruktor von std::string verwendet, der ein einzelnes Zeichen akzeptiert (und die Anzahl dieses Zeichens, die der String enthalten wird, in diesem Fall eins).

0 Stimmen

Von dem, woran ich mich erinnere, ist es std::string(token.at(0), 1)

0 Stimmen

Andere Richtung: Anzahl der Zeichen und das Zeichen. Aber du hast ansonsten recht, Lev.

2voto

paercebal Punkte 78198

Ihr Beispiel ist unvollständig, da Sie den genauen Typ des Vektors nicht angeben. Ich gehe davon aus, dass es sich um std::vector handelt (den Sie möglicherweise mit jedem Zeichen aus einem C-String gefüllt haben).

Meine Lösung wäre es, es erneut in char * umzuwandeln, was den folgenden Code ergibt:

void doSomething(const std::vector & token)
{
    char c[2] = {token.at(0), 0} ;
    int pid   = std::atoi(c) ;
}

Beachten Sie, dass dies eine C-ähnliche Lösung ist (d. h. ziemlich hässlich im C++-Code), aber sie bleibt effizient.

2voto

jyotirmoy Punkte 21
const char tempChar = token.at(0);
int tempVal = atoi(&tempChar);

1voto

jfs Punkte 370717
stringstream ss;
ss << token.at(0);
int pid = -1;
ss >> pid;

Beispiel:

#include 
#include 
#include 

int main()
{
  using namespace std;

  vector token(1, '8');

  stringstream ss;
  ss << token.at(0);
  int pid = -1;
  ss >> pid;
  if(!ss) {
    cerr << "Fehler: Kann '" << token.at(0) << "' nicht in einen Integer umwandeln" << endl; 
  }

  cout << pid << endl;
  return 0;
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X