【问题标题】:Thread 1: EXC_BAD_ACCESS (code=EXC_I386_GPFLT) is causing my scanf to fail [duplicate]线程1:EXC_BAD_ACCESS(代码=EXC_I386_GPFLT)导致我的scanf失败[重复]
【发布时间】:2020-01-02 21:07:44
【问题描述】:
#include <stdio.h>
#include <string.h>
#include <stdbool.h>
int main(int argc, const char * argv[]) {
    bool isTrue=true;
    int nums[50];
    for (int i = 0; i<sizeof(nums); i++) {
        nums[i]=2147483647;
    }
    char operations[49];
    int counter = 0;
    printf("What is your first number? (THERE IS NO PEMDAS, THE NUMBER 2147483647 is not allowed)\n");
    scanf("%d", &nums[counter]); // Thread 1: EXC_BAD_ACCESS (code=EXC_I386_GPFLT)
}

我有更多代码,但与问题无关。感谢您的帮助,只是询问是否需要更多信息(我正在制作一个计算器来排列输入并计算它们 例如。 3 + 5 * 9 / 2 = 36。方程最多可以有 50 个整数和 49 次运算。)

【问题讨论】:

  • i&lt;sizeof(nums) 应该是i&lt;sizeof(nums)/sizeof(nums[0])
  • 不要给我们一半的功能。全部给我们。或者至少让它只编译一半。
  • 发布的代码包含一些“神奇”数字。 “魔术”数字是没有基础的数字。 “神奇”数字使代码更难理解、调试等。建议使用#define 语句或enum 语句为这些“神奇”数字赋予有意义的名称,然后在整个代码中使用这些有意义的名称。跨度>

标签: c int scanf calculator exc-bad-access


【解决方案1】:

您的数组大小以字节为单位,而不是元素的数量。改为这样做:

for( int i = 0; i < sizeof(nums) / sizeof(nums[0]); i++ )
{

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-24
    • 2022-12-03
    • 1970-01-01
    • 2018-03-13
    • 2013-10-11
    • 2019-07-11
    相关资源
    最近更新 更多