![TCHAR * p;int i;while(p[i]!=0){i++;}这段程序是什么意识,i最后会是多少求大神来教教,第1张 TCHAR * p;int i;while(p[i]!=0){i++;}这段程序是什么意识,i最后会是多少求大神来教教,第1张](/aiimages/TCHAR+%2A+p%3Bint+i%3Bwhile%28p%5Bi%5D%21%3D0%29%7Bi%2B%2B%3B%7D%E8%BF%99%E6%AE%B5%E7%A8%8B%E5%BA%8F%E6%98%AF%E4%BB%80%E4%B9%88%E6%84%8F%E8%AF%86%EF%BC%8Ci%E6%9C%80%E5%90%8E%E4%BC%9A%E6%98%AF%E5%A4%9A%E5%B0%91%E6%B1%82%E5%A4%A7%E7%A5%9E%E6%9D%A5%E6%95%99%E6%95%99.png)
这个很简单啊。首先,p表示的是一个字符串
。
第二,对于逻辑判断来说非0即为真。
第三,对于表示指针的p来说(p+i)和p[i]是等价的。
第四,字符串中的字符都对应着一个数字,例如你熟悉的A对应65,'\0'对应0
第五,每个字符串的结尾都有‘\0’
所以i表示这个字符串的长度
指定维数中的元素个数。
这个函数一般用在C#的数组的时候,下面举一个例子来说明:
代码如下:int[][] array=new int[3][5];array[0]=new int[5];array[1]=new int[3];array[2]=new int[8];
代码说明:很明显这是一个二维数组,在这个二位数组中每一个元素又是一个数组,如果想要获取数组一维的长度,可以通过下边代码来实现。
arrayGetLength(0)得到的是数组array第一维的长度为3
array[0]GetLength(0)得到的是数组array第二维的长度为5
:如果想要遍历数组的每一个元素可以通过下边循环语句实现:
代码如下:for(int i=0;i<arrayGetLength(0);i++){ for(int j=0;j<arrayGetLength(1);j++) { …… }}
第二点:GetLength()方法返回的是字符个数(不包括结尾的空字符),要视乎你编译是UNICODE还是MBCS(多字符集)。CString 本身就是TCHAR的封装,所以你定义了UNICODE那么他就占两个字节,否则就是一个字节。你缩小点,你确定你的屏幕的分辨率。可以用这个函数来得到屏幕的长宽GetSystemMetrics,这个模拟器上面显示的比例是内核所决定的屏幕的大小,有800480,480272等等。希望对你有帮助
GetSystemMetrics函数可以获取系统分辨率,但这只是其功能之一,GetSystemMetrics函数只有一个参数,称之为「索引」,这个索引有75个标识符,通过设置不同的标识符就可以获取系统分辨率、窗体显示区域的宽度和高度、滚动条的宽度和高度。
为了使使GetSystemMetrics的功能,我们以获取系统分辨率为例,并将其中的两个值用TextOut输出到窗体中。
第一步:用GetSystemMetrics获取屏幕的宽度和高度
1intx, y;
2x = GetSystemMetrics(SM_CXSCREEN);//屏幕宽度
3y = GetSystemMetrics(SM_CYSCREEN);//屏幕高度
第二步:用TextOut输出分辨率
因为x和y的值是int类型,所以无法用TextOut直接输出,需要借助wsprintf函数,在C中,可以用printf函数直接将字符串输出到屏幕上,但wsprintf是将字符串输出到一个char字符数组中,而且wsprintf会返回输出字符串的长度。
1TCHARszBuffer[10];
2intx =1024;
3inty =768;
4intiLength;
5iLength = wsprintf(szBuffer, TEXT("%5d"),x);
小提示:szBuffer数组的长度一定要大于x的长度,否则不能输出。
以上这段代码,是用wsprintf将x的值存入szBuffer中,然后在iLength中存放x的长度。这一步实际上解决了两个问题,将int类型的屏幕宽度转为了TCHAR类型,TextOut函数可以直接输出TCHAR类型字符串,而且获取了字符串的长度,那么我们就可以用TextOut函数在窗体中输出屏幕的宽度:
TextOut(hdc, 0, 0, szBuffer, iLength);
这个的用法大致就是这样的。应该能实现的。不行的话,继续提出你的问题。到时给你解答
c语言中的windowsh
中包含的可调用的函数有
int
CDECL
MessageBoxPrintf
(TCHAR
szCaption,
TCHAR
szFormat,
)
//TCHAR就是宽字符,你学过C++应该知道CHAR,TCHAR就是CHAR的两倍长度,用来兼容UNICODE的,至于UNICODE和ANSI的区别,你自己去查了。CDECL这个是C语言函数的默认调用惯例,调用惯例是什么,就是 *** 作系统如何调用这个函数,包含了如何保存参数如何返回值等等,具体可以去查。
{
TCHAR
szBuffer
[1024]
;
va_list
pArgList
;//这里提一些必须的东西,va这个开头的宏都是处理可变参数列表的,什么是可变参数列表,意思就是可以变长的参数列表,这个在WINDOWS下用得非常多,比如printf的函数,里面用类似很多%d的格式控制,也有实际输出的内容,都是作为函数的参数,具体有多少要看实际情况,所以可变参数列表在这里就起作用了。
va_list就是申明一个可变参数列表的变量
va_start
(pArgList,
szFormat)
;//va_start用于初始化可变参数列表,具体的效果就是把szFormat这个可变参数列表的第一个参数地址赋给了pArgList
_vsntprintf
(szBuffer,
sizeof
(szBuffer)
/
sizeof
(TCHAR),
szFormat,
pArgList)
;
//这个很简单,就是把szFormat和pArgList格式成字符串放在szBuffer里了
va_end
(pArgList)
;//把pArgList清0,这个只是为了程序的规范。
return
MessageBox
(NULL,
szBuffer,
szCaption,
0)
;
显示一个内容为szBuffer标题为szCaption的默认对话框,只有一个确定的那种
}
int
WINAPI
WinMain
(HINSTANCE
hInstance,
HINSTANCE
hPrevInstance,
PSTR
szCmdLine,
int
iCmdShow)
{
int
cxScreen,
cyScreen
;
cxScreen
=
GetSystemMetrics
(SM_CXSCREEN)
;
cyScreen
=
GetSystemMetrics
(SM_CYSCREEN)
;//取得屏幕的宽高
MessageBoxPrintf
(TEXT
("ScrnSize"),
TEXT
("The
screen
is
%i
pixels
wide
by
%i
pixels
high"),
cxScreen,
cyScreen)
;//调用上面的那个函数,TEXT用于转换为UNICODE
return
0
;
}
WIN32_FIND_DATA结构体中是没有专门存储扩展名的。但是可以使用PathFindExtension函数来达到或许文件类型信息的目的。typedef struct _WIN32_FIND_DATA {
DWORD dwFileAttributes; //文件属性
FILETIME ftCreationTime; // 文件创建时间
FILETIME ftLastAccessTime; // 文件最后一次访问时间
FILETIME ftLastWriteTime; // 文件最后一次修改时间
DWORD nFileSizeHigh; // 文件长度高32位
DWORD nFileSizeLow; // 文件长度低32位
DWORD dwReserved0; // 系统保留
DWORD dwReserved1; // 系统保留
TCHAR cFileName[ MAX_PATH ]; // 长文件名
TCHAR cAlternateFileName[ 14 ]; // 83格式文件名
} WIN32_FIND_DATA, PWIN32_FIND_DATA;文件类型,又叫后缀名或者扩展名。所以可以利用PathFindExtension函数来达到获取文件扩展名的目的。
TCHARpExt = PathFindExtension(cFileName);
pExt保存的是扩展名前面的所在位置的地址。结合文件查找函数,就可以获取文件的类型信息了。


评论列表(0条)