c++ - MFC:将CStringArray转换为 float ,只转换部分值

标签 c++ visual-c++ mfc

我想将 val.ElementAt(i) 转换为浮点值:

 float *d = new float[NMAX];
 char *buffer = new char[128]; 
 CStringArray val;
 //adding some values to val

 buffer = (LPSTR)(LPCSTR)val.ElementAt(i).GetBuffer();
 d[i] = atof(buffer);

作为 d[i] 中的结果,我只有部分值(如果 d 中的 55 是 - 5、666 - 6 ...),请帮助我!

最佳答案

你不应该分配缓冲区;这是糟糕的代码(不做你想做的事)。您可以使用 strncpy,但为什么不直接使用 CString:

d[i] = atof(val.ElementAt(i));

假设您正在为 MBCS 编译,这应该可行。

顺便说一句,您还可以使用 operator[] 重载,使代码更简洁,例如:

d[i] = atof(val[i]);

编辑:如果您使用的是 UNICODE,则需要 atof 的动态 MBCS/UNICODE 宏版本,即 _ttof。参见 http://msdn.microsoft.com/en-us/library/hc25t012%28v=VS.90%29.aspx供完整引用。所以代码变成:

d[i] = _ttof(var[i]);

哦,忘了包括(duh):所有这些函数都返回一个 double,这不一定与 float 相同。因此,将结果数组更改为 double ,或显式转换转换结果。

关于c++ - MFC:将CStringArray转换为 float ,只转换部分值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4009172/

相关文章:

c++ - 什么是编译时多态性,为什么它只适用于函数?

c - C99 语言中具有未命名成员的结构的正确行为是什么?

windows - 通用 Windows 平台应用程序和 C++/CLI (VS 2015 RC1)

visual-c++ - MSVC 2017 缺少 libboost_filesystem-vc141-mt-gd-x32-1_66.lib 错误

c++ - 为什么 Ctrl + A 在 CEdit 中不起作用?

c++ - 如何确定 POINT 是否在按钮区域内

c++ - 方法返回模板类 C++

C++:未计算上下文中的 lambda 表达式

c++ - 解释这个宏

user-interface - 如何向 CRichEditCtrl 添加 Unicode 支持?