当我运行此代码时,我在 Headers 中收到错误,这是一个精确的屏幕截图:
我的代码是这样的:
string ProcessCommand(vector<unsigned char> data)
{
try
{
int valread = data.size();
unsigned char* converted = &data[0];
char *buffer = (char *)converted;
buffer[valread] = '\0';
const char file[] = ">myfile.txt";
char * newBuffer = new char[strlen(buffer) + strlen(file) + 1];
strcpy(newBuffer, buffer);
strcat(newBuffer, file);
system(newBuffer);
fstream f("myfile.txt", fstream::in);
string str;
getline(f, str, '\0');
//const char * sendfile = str.c_str();
//char * result;
//result = const_cast<char *>(sendfile);
f.close();
remove("myfile.txt");
return str;
}
catch (const std::exception&)
{
}
}
1 回答
buffer[valread] = '\0';
正在尝试访问不存在的buffer
元素 . 因此程序行为未定义 .如果您使用了
data.at(valread)
,则会按照C 11标准的要求抛出std::exception
(并在您的catch
网站截获) .还要考虑使用
std::string
的+
重载进行所有连接 . 如果你这样做,你的代码将更具可读性 . 对newBuffer
(具有自动存储持续时间)也使用std::string
类型 . 您始终可以使用c_str()
以只读方式访问内部数据缓冲区 .