Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13

Discussione: [C++] tchar.h

  1. #1

    [C++] tchar.h

    Salve,

    non riesco a capire perchè il seguente codice non funziona:

    codice:
    	TCHAR marameo[256] = {0};
    	strncpy(marameo, _T("Hello World!"), 10);
    mi ritorna: error C2664: 'strncpy' : cannot convert parameter 1 from 'TCHAR [256]' to 'char *'

    Inoltre mi piacerebbe con il seguente codice mostrare le coordinate bottom e right della finestra:

    Codice PHP:
        RECT rc;
        
    memset(&rc,0,sizeof(RECT));
        
    GetWindowRect(hDlg, &rc);
        
        
    char szBottom[5] = {0};
        
    _itoa_s(rc.bottom,szBottom,5,10);

        
    char szRight[5] = {0};
        
    _itoa_s(rc.right,szRight,5,10);

        
    TCHAR marameo[256] = {0};
        
    strncpy(marameo_T("Bottom: "), 10);
        
    strncpy(marameoszBottom10);
        
    strncpy(marameo_T(" Right: "), 10);
        
    strncpy(marameoszRight10);

        
    SetWindowText(hDlg, (LPTSTR)marameo); 
    ma di nuovo ho gli stessi problemi di prima....
    Alla batteria dai retta ballA

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Nelle proprietà di progetto hai impostato Unicode?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    si: Use Unicode Character Set
    Alla batteria dai retta ballA

  4. #4
    Se usi i TCHAR devi usare le apposite funzioni generiche per lavorare con essi, nello specifico devi usare la _tcsncpy. Trovi le versioni generiche di ogni funzione in fondo alla loro documentazione su MSDN.
    Inoltre, se usi i TCHAR da una parte ti conviene usarli ovunque invece di mischiare char e TCHAR (il che ti espone a bug se fai le cose male o ti costringe ad effettuare continue conversioni se le vuoi fare bene).
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da gianvituzzi
    si: Use Unicode Character Set
    La strncpy no ...

    Vedi quello che scrive MItaly ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Ok, naturalmente userò la _tcsncpy_s ora però ho un problema, se faccio:

    codice:
    TCHAR marameo[256] = {0};
    
    _tcsncpy_s(marameo, _T("A"),5);
    _tcsncpy_s(marameo, _T("B"),5);
    _tcsncpy_s(marameo, _T("C"),5);
    _tcsncpy_s(marameo, _T("D"),5);
    in "marameo" avrò D e non ABCD...devo usare per forza la std::copy?

    grazie
    Alla batteria dai retta ballA

  7. #7
    La _tcsncpy copia una stringa nell'altra; se vuoi concatenare dovrai usare la _tcsncat.
    In generale comunque se vuoi fare un favore a te stesso sbarazzati delle stringhe C e usa le stringhe C++: ti risparmierai molti mal di testa e/o bug. Per la questione dei TCHAR, li puoi usare tranquillamente anche con le stringhe C++, dato che sono templatizzate (qui del codice che ti può aiutare).
    Amaro C++, il gusto pieno dell'undefined behavior.

  8. #8
    questa è veramente l'ultima che ti chiedo, infatti dato il seguente codice:

    codice:
    	RECT rc;
    	memset(&rc,0,sizeof(RECT));
    	GetWindowRect(hDlg, &rc);
    	
    	TCHAR szBottom[5] = {0};
    	_itoa_s(rc.bottom,szBottom,5,10);
    
    	TCHAR szRight[5] = {0};
    	_itoa_s(rc.right,szRight,5,10);
    
    	TCHAR marameo[256] = {0};
    	_tcsncat_s(marameo, _T("Bottom: "),10);
    	_tcsncat_s(marameo, szBottom,10);
    	_tcsncat_s(marameo, _T(" Width: "),10);
    	_tcsncat_s(marameo, szRight,10);
    mi ritorna:

    error C2664: 'errno_t _itoa_s(int,char *,size_t,int)' : cannot convert parameter 2 from 'TCHAR [5]' to 'char *'

    Alla batteria dai retta ballA

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Provo ad indovinare ....

    _itot_s

    ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    vi ringrazio, ora me li studio tutti: http://www.koders.com/c/fidC920B0355...6ADFE9BB8.aspx
    Alla batteria dai retta ballA

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.