Windows程序设计Day2

本文详细介绍了C语言中的字符类型,包括字符型常量、指针和数组的使用方法,并深入探讨了宽字符的概念及其在字符串表示中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、回顾C语言中的char数据类型

1、字符型常量

声明一个字符 char c;
声明时候初始化:char c='A';
这时,字符型变量c就会被ox41进行初始化,ox41也就是ASCII中的字符'A'

2、字符型数据的指针
char *p;
char *p = “Hello,World!”;

3、字符数组
char a[10];
char a[10] = “Hello”;
char a[] = “Hello”;

char型变量需要的内存为1个字节;
一个指针型变量在32位操作系统中需要4个字节
对于字符数组a[10]编译器则会自动保留10个字节的存储空间,对于char[]=”Hello”编译器根据字符串的长度给出6个字节的存储空间。

二、宽字符

一个Unicode字符占用2个字节的存储空间,如果我们想用C语言原有的数据类型来表示Unicode的2字节编码类型,则考虑选用 unsigned short int型数据表示一个2字节的字符。这一数据类型在头文件WCHAR.H中的定义为:
typedef unsigned short wchar_t;
所以C语言中的宽字符wchar_t数据类型与一个无符号短整形unsigned short一样,都是16位宽(ox41)

当我们想使用宽字符表示一个字符串,我们还要通知编译器这个字符串将使用宽字符存储,我们用大写的字母’L’(表示长整形)来将这一消息告诉编译器,例如:
wchar_t *p=L”Hello”; 将会用12个字节存储单元的内容。

三、有关宽字符的函数

宽字符串处理函数 # include

int sprintf(char *buffer,const char *format,[argument] -);

sprintf的第一个参数为字符缓冲区,后面的参数就像printf一样,是一个格式化字符串,函数的返回值为缓冲区buffer内的有效字符串长度。

在windows版的printf中,我们可以使用MessageBox函数来替代C语言的标准输入输出函数puts。

#include <stdio.h>
#include <windows.h>

int CDECL myMessageBox( TCHAR * szCaption, size_t iStyle, TCHAR * szFormat, ... )

{  //myMessageBox函数参数: 标题, 样式, 格式化输出内容
  //CDECL为调用规则, 在WINDEF.H定义为: #define CDECL _cdecl

     TCHAR   szBuffer [1024] ; 
     va_list pArgs ;

     va_start (pArgs, szFormat) ;
     _vsnprintf( szBuffer, sizeof(szBuffer) / sizeof (TCHAR), szFormat, pArgs ) ;
   //sizeof(szBuffer) / sizeof (TCHAR)得到最大能容下的字符个数
     va_end (pArgs) ;

     return MessageBox(NULL, szBuffer, szCaption, iStyle) ;

}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    PSTR szCmdLine, int iCmdShow) 
{
     int cxScreen, cyScreen ;

     cxScreen = GetSystemMetrics (SM_CXSCREEN) ; //获取显示器x方向像素
     cyScreen = GetSystemMetrics (SM_CYSCREEN) ; //获取显示器y方向像素

     myMessageBox( TEXT ("显示器分辨率"), MB_OKCANCEL, TEXT ("显示器当前分辨率为:%dx%d。"), TEXT(cxScreen), TEXT(cyScreen) ) ;

     return 0 ;

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值