c++ - 如何解决此代码中的分段错误?
问题描述
我正在尝试制作一个中缀计算器,我目前正在尝试将在字符数组中输入的数字转换为双精度。
这是我的代码:
#include <iostream>
#include<cmath>
using namespace std;
int main()
{
char exp[500];
const int SIZE = 100;
char temp[SIZE];
char op;
int strLen = 0, k, l, num = 0, fnum = 0;
double number = 0;
cin.getline(exp, 500,'\n');
int i = 0, j = 0, fpoint=0;
cout << exp;
for (i = 0, j = 0; exp[j] != 0; i++)
{
if (i % 2 == 0)
{
for (int m = 0; exp[m] != ','; m++) //stopped working
temp[m] = exp[m];
cout << temp;
for (k = 0; k < SIZE && temp[k] != 0; k++)
{
strLen = k;
if (temp[k] == '.')
fpoint = k + 1;
}
cout << fpoint<<endl;
cout << "strLen" << strLen;
for (k = 0; k <= fpoint; k++)
{
num = num + ((temp[fpoint - k] - '0') * pow(10, k));
}
for (k = fpoint + 1, l = 0; k <= strLen; k++, l++)
{
fnum = fnum + ((temp[strLen - l] - '0') * pow(10, l));
}
number = num + (fnum / pow(10, strLen - fpoint + 1));
cout << number;
j = j + strLen + 1;
}
else
{
char op = temp[j];
cout << op;
}
}
system("pause");
return 0;
}
样本输入
2.5*3
它停止工作并将分段错误作为标记位置的错误。
解决方案
for (int m = 0; exp[m] != ','; m++) //stopped working
如果没有,
字符,则此行将始终失败,因为exp[m] != ','
将始终等于true
,因此将超出exp
触发“分段错误”的数组的末尾。
推荐阅读
- flutter - 如何自动升级 Flutter 依赖
- kubernetes - kubernetes:豆荚无法连接到互联网
- java - 如何在spring security中同时配置内存认证和jdbc认证
- javascript - 为日期时间选择器启用手动编辑
- python - 作用于另一个类的多个实例的类函数
- vba - 如何从 Outlook 中提取 PDF 附件并保存到文件夹
- ruby-on-rails - NoMethodError(nil:NilClass 的未定义方法“销毁”):
- deep-learning - 深度学习概念 - 超参数调整权重 RNN/LSTM
- python - Python:从网页中抓取视频(在 HTML 中不可见)
- android - 制作动画时如何将视图置于前面?