C++如何将char数组转换为double类型?解决金额输入转换报错问题
C++ char数组转浮点类型报错解决方案
报错直接原因
你调用的_atof_l是微软平台特有的扩展函数,要求传入第二个locale类型参数,仅传入一个字符数组参数不符合函数定义,因此编译报错。标准C++场景无需使用该平台绑定函数,直接使用标准库转换接口即可。
推荐转换方案
你可以任选以下三种标准实现之一替换报错行:
- 转换为
double类型:直接调用标准C库atof函数double money = atof(pure); - 转换为
long double类型(C11及以上版本):调用C标准库std::stoldlong double money = stold(string(pure)); - 转换为
long double类型(兼容C风格代码):调用C库strtold函数long double money = strtold(pure, NULL);
代码隐藏问题修复
你当前的代码还存在两个逻辑问题需要同步修改:
- 有效字符过滤规则错误
当前判断条件int(array[i]) > 48会过滤掉ASCII码为48的字符'0',导致金额中的0丢失,需要修改为int(array[i]) >= 48。 - 非标准语法兼容性问题
char pure[count + 1]属于变长数组(VLA),是GCC等编译器的扩展语法,不符合C++标准,可移植性差。建议改为使用std::string存储提取后的纯数字字符串,避免内存溢出风险。
修改后完整可运行代码
#include <iostream> #include <cstdlib> #include <cstring> #include <string> using namespace std; const int BUF_SIZE = 100; void mstold(char array[]); int main() { char array[BUF_SIZE]; cout << "enter the amount" << endl; cin >> array; mstold(array); return 0; } void mstold(char array[]) { string pure; // 提取数字和小数点 for (int i = 0; i < strlen(array); i++) { if ((array[i] >= '0' && array[i] <= '9') || array[i] == '.') { pure.push_back(array[i]); } } cout << "提取后的纯数字字符串:" << pure << endl; // 转换为long double long double money = stold(pure); cout << "转换后的浮点金额:" << money << endl; }
内容的提问来源于stack exchange,提问作者Allen Varughese
相关产品推荐
相关产品推荐

