c - CS50 pset3 音乐分段错误
问题描述
今天我完成了音乐项目,或者至少我认为我已经完成了。在 helper.c 上,当我运行 make 时,它会生成音符和合成器文件,并且没有错误。但是当我想运行 ./notes 时,它会给我分段错误错误。即使我用 check50 运行程序,它也给了我这个错误:
由于分段错误而无法执行程序
我个人认为这可能是因为将字符串转换为 int 或我从字符串中获取音符的方式。首先,我介绍了一个用于记笔记的字符串和一个用于记笔记的 ovtav 的 int。
弦音符类似于 D4 或 C#4
因此,我将复制这部分内容,以与您核对是否正确。
string noteletter="";
int noteoctav;
if (strlen(note) == 3)
{
noteletter[0] = note[0];
noteletter[1] = note[1];
noteoctav = note[2] - '0';
}
if (strlen(note)== 2)
{
noteletter[0] = note[0];
noteoctav = note[1] - '0';
}
更新
在这里,我添加了完整的代码,这样你就可以看到我想要做什么。
解决方案
我可以看到两个问题(假设string
是 typedef 的char*
)
如果noteletter
长度为 0(值= ""
),那么您认为noteletter[1]
在做什么?
即使noteletter
设置为更大的值(例如noteletter = "ABC";
) - 写入文字字符串也是未定义的行为。
试着char noteletter[3] = { 0 };
得到一些(一目了然)看起来足够大的东西。
另一个可能的问题:if note
is NULL
or invalid thenstrlen(note)
不安全。
推荐阅读
- typescript - 如何正确键入从 Record<> 扩展的接口的交集?
- testing - TestCafe - 如何在非 Chrome 浏览器中运行并显示测试执行
- python - 无法通过 pydrive 对谷歌驱动器进行身份验证
- c - toLower C 中的字符串 0xC0000005
- java - UML 对象图:父或子
- airflow - Apache Airflow (2.0.0b1) - 动态创建任务并在函数中访问 kwargs
- python - 如何使用 discord.py 检索以前的消息
- python-3.x - 超声波传感器 HC-SR04 和 RCWL-1601 的测量速度正在减慢
- python - 大家好,我在使用 pandasql 运行简单的 sql 查询时遇到了一些麻烦
- python - 如何在不弹出 cmd 的情况下使用 .bat 文件启动 .pyw 脚本?