我正在为 3d 引擎制作搅拌机模型加载器, 尝试转换其中包含浮点数的特定行, 例如:(v 1.000000 -1.000000 1.000000), 我尝试使用 std::stod() 将文件(字符串)中的数字转换为浮点数,但它不起作用(给出调试错误:已调用 abort()) 这是代码:
string search(string s, char c, int st)
{
int i = st;
string n; // substring
while (i < s.size()) // if i hasnt reached end of string
{
if (s.at(i) == c) // if s[i] is a certain character, break while loop
{
break;
}
n.at(i) = s[i]; // assign characters of s to n
i++;
}
return n;
}
void mesh::load(fstream &file) // file not important for error
{
string line = "v 1.000000";
string n = ""; // substring of search()
n.resize(34);
int st = 2; // starting index
n = search(line, ' ', st); // makes a substring that end at ' ' or end of string
// code that dont work (gives debug error: abort() has been called )
float f;
f = stod(n);
cout << f << "\n";
/*
while (getline(file,line))
{
switch (line.at(0))
{
case 'v':
cout << "\n";
}
}
*/
}
问题是你的
search()
功能。 n.at(i) = s[i];
开始在索引 n
处填充 2
,使之前的索引未定义。您不应使用相同的 i
来索引 n
和 s
。
您只想将找到的字符附加到
n
,这可以使用+=
来完成(请参阅如何将字符附加到std::string?以分析不同方法)。
string search(string s, char c, int st)
{
int i = st;
string n; // substring
while (i < s.size()) // if i hasnt reached end of string
{
if (s.at(i) == c) // if s[i] is a certain character, break while loop
{
break;
}
n += s[i]; // assign characters of s to n
i++;
}
return n;
}