【发布时间】:2016-05-19 13:18:58
【问题描述】:
所以这对某些人来说可能是一个非常明显的问题,但我不知道从哪里开始处理这个错误。
我有一些代码可以从 .txt 文件中读取一些字符串,所有字符串都有一个“:”,然后是一个数字。示例:
每种颜色的对象数:1
机器人数量:10
预定义位置:1
当我手动编辑值时,stoi 工作正常,但是当 c# 代码将值写入同一个文件时(请注意,我已经手动检查过,并且有相同的,没有多余的空格,没有多余的字符,视觉上没有什么不同)stoi抱怨。我的代码是下一个:
c++:
cout << "Number..." << endl;
cout << dataLine.substr(dataLine.find_first_of(":")+1) << endl;
try{
cfgVals.push_back(stoi(dataLine.substr(dataLine.find_first_of(":")+1)));
}catch(exception& ex){
cout << ex.what() << endl;
}
在这两种情况下,数据线的 cout 都会发送一个空格,然后是数字“1”或“10”。当我编辑文件时,stoi 不会抛出异常,但被其他程序编辑时,它会抛出异常(尽管如此,它似乎还是正确地进行了转换)。
我用c#写文件的命令很简单:
File.WriteAllLines(@nameFile, param);
其中 param 是一个字符串列表。
希望我足够清楚,有什么想法吗?提前致谢!
【问题讨论】:
-
你考虑过字符编码吗?也许你的“C#”写文件为“UTF-8”,据我所知,“stoi”正在处理“ASCII”
-
什么是异常 - 即 ex.what() 返回什么?
-
@Freeman Zhang,你可能正在做点什么……我会看看那个。
-
@Anon Mail,基本上是无效参数异常。
-
我的猜测是不同的换行符,
\r\n用于 C#,\n用于您的编辑器。阅读时,您的正确行之间出现空行,这解释了为什么您看到异常并且仍然在cfgVals中获得正确的值。
标签: c++ visual-studio c++11 integer