使用GetModuleFileName只能获取程序路径的盘符

在Windows环境下,使用VS2015编译的Unicode程序,通过GetModuleFileName函数获取的路径在printf打印时仅显示磁盘符。该问题源于Unicode编码与ASCII编码的差异。本文提供了如何打印和保存完整路径的代码示例。
摘要由CSDN通过智能技术生成

    在windows环境中用vs2015编译程序后,函数GetModuleFileName获取到的路径使用printf打印出来只有磁盘符,而不是整个路径。vs2015编译时设置的字符集是unicode,(其中:Unicode通常用两个字节表示一个字符,这是与ASCII编码不同的地方,网上很多资料有描述)我遇到问题是,用GetModuleFileName获取到路径后,还想保存到char型的字符数组中,网上关于怎么打印出来有很多资料,但是很少有简单解释怎么保存的,下面附上我的打印和保存的代码段。 

#include <windows.h>
#include <stdio.h>
#include <iostream>
#include <string>
#include <atlstr.h>
using namespace std;

string UnicodeToUtf8(const wstring& wstr) {
	// 预算-缓冲区中多字节的长度    
	int ansiiLen = WideCharToMultiByte(CP_UTF8, 0, wstr.c_str(), -1, nullptr, 0, nullptr, nullptr);
	// 给指向缓冲区的指针变量分配内存    
	char *pAssii = (char*)malloc(sizeof(char)*ansiiLen);
	// 开始向缓冲区转换字节    
	WideCharToMultiByte(CP_UTF8, 0, wstr.c_str(), -1, pAssii, ansiiLen, nullptr, nullptr);
	string ret_str = pAssii;
	free(pAssii);
	return ret_str;
}

char* UnicodeToAnsi(const wchar_t* szStr)
{
	int nL
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值