sprintf无法正常工作 - 导致访问冲突

时间:2015-03-31 16:39:38

标签: c++

我正在使用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。

2 个答案:

答案 0 :(得分:4)

具有"%s"格式说明符的

sprintf需要char*参数。另一方面,getIntsFromFile()会返回std::string。如果参数类型与预期类型不匹配,则行为未定义(在您的情况下,您可以将其视为访问冲突)。

要确认这一点,您可以尝试

sprintf(myString, "%s", getIntsFromFile().c_str());

代替。

但请注意,随着整数的增加以及字符串超出myString缓冲区的分配大小,这也可能会失败。

答案 1 :(得分:2)

在字符串上使用c_str()方法或为此目的使用std::copy()方法。