nim*_*son 1 c++ username windows-7
我想获取当前进程的用户名.我正在使用winapi标准GetUsername函数,如下所示:
TCHAR username[UNLEN + 1];
DWORD size = UNLEN + 1;
GetUserName((TCHAR*)username, &size);
Run Code Online (Sandbox Code Playgroud)
并像这样打印:
for(int i = 0; i <= UNLEN; i++) if(isalpha(username[i])) cout << (char)(username[i]);
Run Code Online (Sandbox Code Playgroud)
但它输出
Nickiê╕╕■scm +♣■pα┬p♠■≡î■MM♣■╧*■╔■♣ÿ(♣♣(♣♣♣♣T♣@♣3♣■┐
Nicki是我正在测试的系统的用户名.我不知道我做错了什么.编译很好,我包括在内
#include <Windows.h>
#include <Lmcons.h>
#include <iostream>
#include <ctype.h>
#include <string>
Run Code Online (Sandbox Code Playgroud)
这些标题.
有人可以帮忙!
代替
for(int i = 0; i <= UNLEN; i++) if(isalpha(username[i])) cout << (char)(username[i]);
Run Code Online (Sandbox Code Playgroud)
你应该说
for(int i = 0; i <= size; i++) if(isalpha(username[i])) cout << (char)(username[i]);
Run Code Online (Sandbox Code Playgroud)
因为GetUserName计算出实际用户名的长度并将其传递给size(这就是它通过引用传递的原因).完整的username数组是257个元素长,所以它会让你cout所有这些,其中大部分都是无稽之谈.
从MSDN站点:http://msdn.microsoft.com/en-us/library/windows/desktop/ms724432%28v=vs.85%29.aspx
lpnSize [in,out]在输入时,此变量在TCHAR中指定lpBuffer缓冲区的大小.在输出时,变量接收复制到缓冲区的TCHAR数,包括终止空字符.
| 归档时间: |
|
| 查看次数: |
2580 次 |
| 最近记录: |