今天我完成了音乐项目,或者至少我认为我已经完成了它。 在helper.c上,当我运行make时,它会同时生成音符和合成器文件,并且没有错误。但是,当我想运行./notes时,它会给我分段错误错误。即使我用check50运行程序,它也给了我这个错误:
由于分段错误,无法执行程序
我个人认为这可能是因为将字符串转换为int或我从字符串中获取音符的方式。首先,我介绍了一个用于记录音符的字符串和一个用于记录音符的ovtav的字符串。
字符串注释类似于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';
}
我在这里添加了完整的代码,以便您可以看到我想要做的事情。
答案 0 :(得分:2)
我可以看到两个问题(假设string
是char*
的typedef
如果noteletter
的长度为0(值= ""
),那么您认为noteletter[1]
正在做什么?
即使将noteletter
设置为更大的值(例如noteletter = "ABC";
) - 写入文字字符串也是未定义的行为。
尝试char noteletter[3] = { 0 };
获得(快速浏览)看起来足够大的东西。
另一个可能的问题:如果note
为NULL
或无效,则strlen(note)
不安全。
答案 1 :(得分:0)
(代表作者提问回答)
我的问题是我将noteletter定义为字符串。我将那部分改为
char noteletter[4];
int noteoctav;
if (strlen(note) == 3)
{
noteletter[0] = note[0];
noteletter[1] = note[1];
noteletter[2] = '\0';
noteoctav = note[2] - '0';
}
if (strlen(note)== 2)
{
noteletter[0] = note[0];
noteletter[1] = '\0';
noteoctav = note[1] - '0';
}
现在它有效:)