我有一个功能,可以从参数中给出的字符串中下载我的网站(纯粹的字符串是url的结尾)。丢给我失败
变量“ url”周围的堆栈已损坏。
我的代码:
void download_wordnik(string word) {
string s1 = word;
std::wstring w_word_Tmp1(s1.begin(), s1.end());
wstring w_word1 = w_word_Tmp1;
std::wstring stemp1 = std::wstring(s1.begin(), s1.end());
LPCWSTR sw1 = stemp1.c_str();
TCHAR url[] = TEXT("https://www.wordnik.com/words");
wsprintf(url, TEXT("%s\/%s\/"), url, sw1);
LPCWSTR sw2 = stemp1.c_str();
TCHAR path[MAX_PATH];
GetCurrentDirectory(MAX_PATH, path);
wsprintf(path, TEXT("%s\\wordnik\\%s\.txt"), path, sw2);
HRESULT res = URLDownloadToFile(NULL, url, path, 0, NULL);
// Checking download
if(res == S_OK) {
printf("Ok\n");
} else if(res == E_OUTOFMEMORY) {
printf("Buffer length invalid, or insufficient memory\n");
} else if(res == INET_E_DOWNLOAD_FAILURE) {
printf("URL is invalid\n");
} else {
printf("Other error: %d\n", res);
}
}
我正在使用这包括
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <Urlmon.h>
#include <regex>
#pragma comment(lib, "urlmon.lib")
using namespace std;
你写的界限之外url
你的时候wsprintf
到了。
而是这样做(用于常规格式)
std::wostringstream urlstream;
urlstream << TEXT("https://www.wordnik.com/words/") << sw1 << TEXT("/");
std::wstring url = urlstream.str();
或(更简单)
std::wstring url = std::wstring(TEXT("https://www.wordnik.com/words/")) + sw1 + TEXT("/");
您正在大量复制变量-据我所知,您可以将代码缩减为:
std::wstring w_word(word.begin(), word.end());
std::wstring url = std::wstring(TEXT("https://www.wordnik.com/words/")) + w_word + TEXT("/");
TCHAR currentpath[MAX_PATH];
GetCurrentDirectory(MAX_PATH, currentpath);
std::wstring path = std::wstring(currentpath) + TEXT("\\wordnik\\") + w_word + TEXT(".txt");
HRESULT res = URLDownloadToFile(NULL, url.c_str(), path.c_str(), 0, NULL);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句