Problem mit string



  • hallo zusammen,

    ich möchte über ein Edit-Feld einen string einlesen und diesen dann in einen float umwandeln. hier der code:

    char    sza[10];
        float   a;
    
        SendMessage(GetDlgItem (hDlg, IDC_EDIT_A), WM_GETTEXT, 
    	        		(WPARAM) 5, (LPARAM) sza);
        a = atof (sza);
    

    das problem ist nu, dass das char-array irgendwie komisch belegt wird. gebe ich z.B. 234 ein steht im array 2,0,3,0,4,0. mit atof erhalte ich dann als wert für a 2, was ja nun nicht so ganz passt.

    wenn ich für sza TCHAR verwende (so wird der Edit-Text ja anscheinend interpretiert) meckert der compiler aber bei atof:

    error C2664: 'atof': Konvertierung des Parameters 1 von 'TCHAR [10]' in 'const char *' nicht möglich
    

    bin für sachdienliche hinweise sehr dankbar, und wenn ich irgendwelche informationen vergessen habe, reiche ich die gerne nach 🙂



  • Du hast UNICODE definiert (was auch gut so ist); aber Du musst jetzt überall char durch TCHAR und auch soinstige ASCII-Funktionen durch die passenden TCHAR.h Funktionen ersetzen...

    Also:

    TCHAR sza[10];
    float   a;
    SendMessage(GetDlgItem (hDlg, IDC_EDIT_A), WM_GETTEXT, 
                        (WPARAM) 5, (LPARAM) sza);
    a = _tstof(sza);
    

    Siehe auch:
    http://msdn2.microsoft.com/c426s321



  • danke sehr, damit klappts. was ist denn dann das tchar-pendant zu gcvt oder ähnlichem, also um einen float in einen string zurückzuwandeln. in der msdn find ich nix



  • Ich pers. verwende da immer sprintf... => _stprintf



  • Achso, ich sollte vlt dazu sagen, dass ich den string über eine liste ausgeben möchte, also ungefähr so:

    _gcvt (floatvariable, 5, charbuffer); 
    SendMessage (GetDlgItem (hDlg, IDC_RIDGE_LIST), LB_ADDSTRING, 0, (LPARAM) charbuffer);
    

    ich müsste die floatvariable also praktisch erstmal in eine stringvariable umwandeln.
    in tchar.h sehe ich aber irgendwie nur funktionen um integer aller arten in strings umzuwandeln. float in string find ich nicht, oder hab ich da was übersehen?



  • P.s.: mit obigem code gibt er in der liste nur sonderzeichen aus



  • Ne float instrings geht ned. Machs doch mit Stringstreams?
    Da kannste auch die Nachkommastellen geeignet formatieren.



  • oh jetzt hab ich das mit _stprintf gecheckt. brauch manchmal n bißchen länger 😉 aber jetzt gibts n neues problem. hier erst mal der code

    /*-------------------------Werteausgabe in Liste------------------------------*/
    int ListRidge (HWND hDlg, t_num * num, int order)
    {
    	TCHAR	buffer[10];
    
    	SendMessage (GetDlgItem (hDlg, IDC_RIDGE_LIST), LB_RESETCONTENT, 0, 0);
    
    	for (int i=0; i<order; i++)
    	{
    		_stprintf (buffer, TEXT("%f"), num[i].kc);
    		SendMessage (GetDlgItem (hDlg, IDC_RIDGE_LIST), LB_ADDSTRING, 0, (LPARAM) buffer);
    	}
    
    	return 1;
    }
    

    das ist die fkt die die werte in die liste ausgeben soll. im debugger kann ich auch sehen, dass die richtigen werte in "buffer" stehen. am funktionsende, also direkt nach return stopt der debugger dann aber

    Run-Time Check Failure #2 - Stack around the variable 'buffer' was corrupted.
    

    was soll das denn jetzt heissen und wieso sagt er mir das erst, wenn ich buffer eigentlich schon gar nicht mehr brauche? fragen über fragen



  • hat sich erledigt, buffer war zu klein


Anmelden zum Antworten