gpt4 book ai didi

c - 得到一个奇数,太奇怪了

转载 作者:行者123 更新时间:2023-11-30 17:26:49 26 4
gpt4 key购买 nike

相关代码如下:

            char* url;
url = "http://xxxx/index.txt";

TCHAR t_url[256];
charToTchar(url, t_url);
downloadFile(t_url);

两个函数:

            charToTchar(const char *_char, TCHAR *tchar)
{
int iLength ;
iLength = MultiByteToWideChar (CP_ACP, 0, _char, strlen (_char) + 1, NULL, 0) ;
MultiByteToWideChar (CP_ACP, 0, _char, strlen (_char) + 1, tchar, iLength) ;
}

downloadFile(TCHAR *url_value)
{
TCHAR path[256];
SHGetSpecialFolderPath(NULL, path, 28 , false);
wcscat_s(path, _T("\\check.txt"));

char* c_url_value;
c_url_value = "";

int iLength ;
iLength = WideCharToMultiByte(CP_ACP, 0, url_value, -1, NULL, 0, NULL, NULL);
WideCharToMultiByte(CP_ACP, 0, url_value, -1, c_url_value, iLength, NULL, NULL);

DeleteUrlCacheEntry(c_url_value);
HRESULT hr = URLDownloadToFile(0, url_value, path, 0, 0);
}

正确的 TCHAR 路径应如下所示:

C.:\......\L.o.c.a.l.\.c.h.e.c.k...t.x.t.

但是当我第二次运行“downloadFile”函数时,TCHAR 路径变得如此奇怪:

C.:\......\L.o.c.a.l.index.txt.k.t.x.t.

ps 我正在使用 VC++,但我认为它不支持“wcscat_s”。有什么解决办法吗?

最佳答案

如果字符集类型是 Unicode,则从一开始就使用 char* 是不正确的。

        TCHAR url[] = _T("http://xxxx/index.txt");
DeleteUrlCacheEntry(url);
downloadFile(url);

函数DeleteUrlCacheEntry需要 LPCTSTR

http://msdn.microsoft.com/en-us/library/windows/desktop/aa383983%28v=vs.85%29.aspx

此类型的定义取决于 Visual C++ 的生成设置。如果构建是 UNICODE ,那么字符串类型是16位,而不是8位。

因此,为了“构建中立”,要使用的类型是 TCHAR_T的使用可以使用宏来创建字符串常量。

当选择的字符集类型为 Unicode (Visual Studio 2010) 时,以下程序编译成功:

#include <tchar.h>
#include <windows.h>
#include <WinInet.h>

int main()
{
TCHAR url[] = _T("http://xxxx/index.txt");
DeleteUrlCacheEntry(url);
}

如果选择 UNICODE 构建,则以下程序无法成功编译:

#include <tchar.h>
#include <windows.h>
#include <WinInet.h>

int main()
{
char* url = "http://xxxx/index.txt";
DeleteUrlCacheEntry(url);
}

错误如下:

错误 C2664:“DeleteUrlCacheEntryW”:无法将参数 1 从“char *”转换为“LPCWSTR”指向的类型不相关;转换需要reinterpret_cast、C 风格转换或函数风格转换

<小时/>

如果您确定它是 UNICODE 并且不会是任何其他字符集构建,您可以避开所有这些,只使用 std::wstring ,而不是 TCHAR_T 。或者更好的是,您可以使用 std::basic_string<TCHAR>并利用可用的功能。

关于c - 得到一个奇数,太奇怪了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26633256/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com