Programma di testo generico di esempioA Sample Generic-Text Program

Sezione specifica MicrosoftMicrosoft Specific

Il seguente programma, GENTEXT.C, fornisce un'illustrazione più dettagliata dell'uso delle mappature di testo generico definite in TCHAR.H:The following program, GENTEXT.C, provides a more detailed illustration of the use of generic-text mappings defined in TCHAR.H:

// GENTEXT.C  
// use of generic-text mappings defined in TCHAR.H  

#include <stdio.h>  
#include <stdlib.h>  
#include <string.h>  
#include <direct.h>  
#include <errno.h>  
#include <tchar.h>  

int __cdecl _tmain(int argc, _TCHAR **argv, _TCHAR **envp)  
{  
   _TCHAR buff[_MAX_PATH];  
   _TCHAR *str = _T("Astring");  
   char *amsg = "Reversed";  
   wchar_t *wmsg = L"Is";  

#ifdef _UNICODE  
   printf("Unicode version\n");  
#else /* _UNICODE */  
#ifdef _MBCS  
   printf("MBCS version\n");  
#else  
   printf("SBCS version\n");  
#endif  
#endif /* _UNICODE */  

   if (_tgetcwd(buff, _MAX_PATH) == NULL)  
       printf("Can't Get Current Directory - errno=%d\n", errno);  
   else  
       _tprintf(_T("Current Directory is '%s'\n"), buff);  
   _tprintf(_T("'%s' %hs %ls:\n"), str, amsg, wmsg);  
   _tprintf(_T("'%s'\n"), _tcsrev(_tcsdup(str)));  
   return 0;  
}  

Se _MBCS è stato definito, GENTEXT.C esegue il mapping al seguente programma MBCS:If _MBCS has been defined, GENTEXT.C maps to the following MBCS program:

// crt_mbcsgtxt.c  

/*   
 * Use of generic-text mappings defined in TCHAR.H  
 * Generic-Text-Mapping example program  
 * MBCS version of GENTEXT.C  
 */  

#include <stdio.h>  
#include <stdlib.h>  
#include <mbstring.h>  
#include <direct.h>  

int __cdecl main(int argc, char **argv, char **envp)  
{  
   char buff[_MAX_PATH];  
   char *str = "Astring";  
   char *amsg = "Reversed";  
   wchar_t *wmsg = L"Is";  

   printf("MBCS version\n");  

   if (_getcwd(buff, _MAX_PATH) == NULL) {  
       printf("Can't Get Current Directory - errno=%d\n", errno);  
   }  
   else {  
       printf("Current Directory is '%s'\n", buff);  
   }  

   printf("'%s' %hs %ls:\n", str, amsg, wmsg);  
   printf("'%s'\n", _mbsrev(_mbsdup((unsigned char*) str)));  
   return 0;  
}  

Se _UNICODE è stato definito, GENTEXT.C esegue il mapping alla seguente versione Unicode del programma.If _UNICODE has been defined, GENTEXT.C maps to the following Unicode version of the program. Per altre informazioni sull'uso di wmain nei programmi Unicode in sostituzione di main, vedere Utilizzo di wmain in Riferimenti del linguaggio C.For more information about using wmain in Unicode programs as a replacement for main, see Using wmain in C Language Reference.

// crt_unicgtxt.c  

/*   
 * Use of generic-text mappings defined in TCHAR.H  
 * Generic-Text-Mapping example program  
 * Unicode version of GENTEXT.C  
 */  

#include <stdio.h>  
#include <stdlib.h>  
#include <string.h>  
#include <direct.h>  

int __cdecl wmain(int argc, wchar_t **argv, wchar_t **envp)  
{  
   wchar_t buff[_MAX_PATH];  
   wchar_t *str = L"Astring";  
   char *amsg = "Reversed";  
   wchar_t *wmsg = L"Is";  

   printf("Unicode version\n");  

   if (_wgetcwd(buff, _MAX_PATH) == NULL) {  
      printf("Can't Get Current Directory - errno=%d\n", errno);  
   }  
   else {  
       wprintf(L"Current Directory is '%s'\n", buff);  
   }  

   wprintf(L"'%s' %hs %ls:\n", str, amsg, wmsg);  
   wprintf(L"'%s'\n", wcsrev(wcsdup(str)));  
   return 0;  
}  

Se _MBCS_UNICODE sono stati definiti, GENTEXT.C esegue il mapping al codice ASCII a byte singolo, come segue:If neither _MBCS nor _UNICODE has been defined, GENTEXT.C maps to single-byte ASCII code, as follows:

// crt_sbcsgtxt.c  
/*   
 * Use of generic-text mappings defined in TCHAR.H  
 * Generic-Text-Mapping example program  
 * Single-byte (SBCS) Ascii version of GENTEXT.C  
 */  

#include <stdio.h>  
#include <stdlib.h>  
#include <string.h>  
#include <direct.h>  

int __cdecl main(int argc, char **argv, char **envp)  
{  
   char buff[_MAX_PATH];  
   char *str = "Astring";  
   char *amsg = "Reversed";  
   wchar_t *wmsg = L"Is";  

   printf("SBCS version\n");  

   if (_getcwd(buff, _MAX_PATH) == NULL) {  
       printf("Can't Get Current Directory - errno=%d\n", errno);  
   }  
   else {  
       printf("Current Directory is '%s'\n", buff);  
   }  

   printf("'%s' %hs %ls:\n", str, amsg, wmsg);  
   printf("'%s'\n", strrev(strdup(str)));  
   return 0;  
}  

Fine sezione specifica MicrosoftEND Microsoft Specific

Vedere ancheSee Also

Mapping testo generico Generic-Text Mappings
Mapping dei tipi di dati Data Type Mappings
Mapping costanti e variabili globali Constant and Global Variable Mappings
Mapping di routine Routine Mappings
Uso di mapping di testo genericoUsing Generic-Text Mappings