gpt4 book ai didi

CS50:pset3 音乐 (C) 的持续时间部分出现段错误

转载 作者:行者123 更新时间:2023-11-30 20:31:19 25 4
gpt4 key购买 nike

我包含了正确的库和所有内容,这部分代码由于某种原因给出了段错误:

int numerator = atoi(&fraction[0]);  
int denominator = atoi(&fraction[2]);
return ((numerator / denominator) * 8);
<小时/>

如果我选择不使用 atoi() 转换为 int,而是执行一堆这样的 if 语句:

if (fraction[0] == '1' && fraction[2] == '8')
{
return 1;
}

else if (fraction[0] == '1' && fraction[2] == '4')
{
return 2;
}
.
.
.
.
<小时/>

它有效。
我很困惑,我想使用第一种方法,因为它效率更高。

编辑:这是哈佛大学在其类(class) CS50 中给出的问题的一部分。完整的程序使用了哈佛编写的几个相互依赖的文件。我的角色只是写下我在这里询问的片段。当然,我阅读并理解了他们提供的文件中的代码。恐怕我无法以一种无需太长即可验证的方式复制整个程序。我希望熟悉类(class)问题的人能够回答,或者仅在代码片段中就可以清楚地看出错误。不管怎样,谢谢你,我很抱歉不清楚。

最佳答案

您尝试将单个字符(似乎)传递给 atoi函数,当它需要一个空终止字节字符串时。

C 中的所有字符串都必须以空字符 '\0' 终止。如果该终止符不存在,字符串函数将不知道字符串在哪里结束,并超出范围,这将导致 undefined behavior .

如果您有一个数字字符,并且想要将其转换为与该数字对应的整数值,有一个简单的技巧:减去字符'0'。如fraction[0] - '0'。这将为您提供 fraction[0] 中数字的整数值。

<小时/>

在对用户输入值进行除法之前,请确保分母不

关于CS50:pset3 音乐 (C) 的持续时间部分出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51646279/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com