Code Bye

C++ utf8-GB转换问题

本人写了段代码,用在DLL
这段代码是为了测试utf8gb转换,当执行这段代码时,excel就会崩溃
DLLIMPORT __stdcall char* HiWorld(char* a)
{
	//char* b;
	strcpy(a,"这是一个测试!");
	a=G2U(a);
	a=U2G(a);
	return a;
}

而注释G2U及U2G两行后,就能正常运行,如:

DLLIMPORT __stdcall char* HiWorld(char* a)
{
	//char* b;
	strcpy(a,"这是一个测试!");
    //a=G2U(a);
	//a=U2G(a);
	return a;
}

问一下什么原因?

解决方案

20

关键在这里:
    
//a=G2U(a);
//a=U2G(a);

传进来的a,在传进来之前,是一个数组,还是一个char*类型的指针。
假如是数组,那么就相当于改变数组首地址,这个肯定是不行的。

char* HiWorld(char* a) {
    strcpy(a,"This is a test");   //这样做是可以的。
    a = "abc";    //这样做事很危险的。
    return a;
}
int main() {
	char a[MAX_PATH];
	HiWorld(a);
	return 0;
}

你应当把a=G2U(a) 改成strcpy之类的代码。


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明C++ utf8-GB转换问题