gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 15:37:47 26 4
gpt4 key购买 nike

我正在使用 sprintf() 但是,我遇到了访问冲突错误;

只有当字符串的内容只包含 3 个或更少的整数时才会出现此错误。 (如下所示)

这是一种从txt文件中读入整数,然后对它们进行排序的方法;

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];<br/>
sprintf(myString, "%s", getIntsFromFile());

这仅在 txt 文件中有超过 3 个整数但提示访问冲突错误时有效。

txt文件中的整数由'\n'分隔,所以每一行只有一个整数。

最佳答案

sprintf with "%s" 格式说明符需要一个 char* 参数。另一方面,getIntsFromFile() 返回一个 std::string。如果参数类型与预期类型不匹配,则行为未定义(在您的情况下,您可以将其观察为访问冲突)。

要确认这一点,你可以试试

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

相反。

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

关于c++ - sprintf 无法正常工作 - 导致访问冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29373905/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com