我正在使用sprintf()但是,我收到了访问冲突错误;
仅当字符串的内容包含3个或更少的整数时才会出现此错误。 (显示如下)
这是一个从txt文件中读入int然后对它们进行排序的方法;
string getIntsFromFile() {
ifstream myfile("/pathToFile/file.txt");
vector<int> values;
int value = 0;
string testString;
while (!myfile.eof())
{
myfile >> value;
if (myfile.eof()) break;
values.push_back(value);
}
sort(values.begin(), values.end(), greater<int>());
for (int i = 0; i < values.size(); i++)
testString = testString + to_string(values[i]) + "\n";
return testString;
}
然后我使用;
调用此函数 char myString[128];
sprintf(myString, "%s", getIntsFromFile());
仅当txt文件中有超过3个整数但是提示访问冲突错误时才会有效。
txt文件中的int由'\ n'分隔,因此每行只有一个int。
答案 0 :(得分:4)
"%s"
格式说明符的 sprintf
需要char*
参数。另一方面,getIntsFromFile()
会返回std::string
。如果参数类型与预期类型不匹配,则行为未定义(在您的情况下,您可以将其视为访问冲突)。
要确认这一点,您可以尝试
sprintf(myString, "%s", getIntsFromFile().c_str());
代替。
但请注意,随着整数的增加以及字符串超出myString
缓冲区的分配大小,这也可能会失败。
答案 1 :(得分:2)
在字符串上使用c_str()
方法或为此目的使用std::copy()
方法。