C到stof()/ stoi()的C无效参数(std :: invalid_argument:stoi:无转换)

时间:2019-11-19 01:08:34

标签: c++ string casting std

我有一个程序,我尝试从向量中提取字符串值并将其转换为浮点型。根据我解析输入数据的方式,确保该字符串是一个数值。尝试运行程序时,出现以下错误。

libc++abi.dylib: terminating with uncaught exception of type std::invalid_argument: stof: no conversion
Abort trap: 6

我跟踪了问题的出处,也正是我在调用stof()的过程中将向量中的值转换为浮点数。当我也对值调用stoi()时,该问题仍然存在。我使用了typeid调用来验证值,并将类型转储到控制台。

type of there_list[2]: NSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE
val of there_list[2]: 10

我绝对不知道为什么会这样,或者什至是什么情况,因为我的向量显然是字符串的向量。

有问题的代码如下:

string there(buffer);
vector<string> there_list = parse_word_list(there);

// Decide where to send the message next
// if the intended recipient (who the message is addressed to) is in range, send directly to recipient
cout << "type of there_list[2]: " << typeid(there_list[2]).name() << endl;
cout << "val of there_list[2]: " << there_list[2] << endl;


float dist_to_recipient = distance(sensor.getX(), sensor.getY(), stof(there_list[2]), stof(there_list[3]));

其中buffer是一个char[],用于从服务器读取输入数据。我的parse_word_list(there)调用返回there中包含的“单词”的字符串矢量,以空格分隔。

该功能是基本功能,看起来像这样

vector<string> parse_word_list(string phrase){

    istringstream parse(phrase);
    vector<string> word_list;

    // Traverse through all words 
    do {
        // Read a word
        string word; 
        parse >> word; 

        // Append the read word to the word_list
        word_list.push_back(word);

    } while(parse); // While there is more to read 
    return word_list;
}

0 个答案:

没有答案