strtol-Problem



  • Hallo,

    ich hab folgenden Quelltext:

    #include <stdlib.h>
    #include <stdio.h>
    #include <time.h>
    #include <string> 
    using namespace std;
    
    long __declspec (dllexport) __stdcall test(
    char *arrValue1,long arr1Elements,
    char *arrValue2,long arr2Elements,
    char *arrResult,long arr3Elements) 
    {
             long  i;
    	char  *test;
    	string s = arrValue1;
    	s = s.substr(2,1);
    
    	i = strtol(s, test, 1);
    	return i;
    }
    

    Das Problem liegt darin, dass in der Zeile

    i = strtol(s, test, 1);
    

    ein Fehler kommt, scheinbar weil s kein char* ist.
    Ich weiß aber auch nicht wie ich es anders machen soll. Kann mir jemand helfen?

    Danke, Rico.



  • string s;
    ...
    s.c_str() // liefert einen const char *
    

    Aber eine Basis von eins, das halt ich für unwahrscheinlich.



  • An den Pointer kommst Du mit

    s.c_str(), außerdem muß die Adresse des Pointers übergeben werden, also &test.
    Zuguterletzt mußt Du auch die Basis richtig angeben. 1 scheint wohl nicht sinnvoll zu sein. Es gibt kein Einsersystem.

    Der Aufruf müßte also irgendwie so heißen:
    const int BASE=10;
    i = strtol(s.c_str(), &test, BASE);

    Allerdings ist das ganze mehr C als C++.
    Wenn Du nur 10er oder 16er-System hast, dann kannst Du das ganze in meinen Augen viel einfacher mit stringstreams machen.
    AFAIK dürfte sich auch boost::lexical_cast eignen.

    MfG Jester


Anmelden zum Antworten