首页 > 解决方案 > C中的数组越界

问题描述

我想知道如何在 C 中捕获 IndexOutofbounds。我不希望我的程序异常退出,我想为用户打印一条消息以澄清错误

我如何检查这种情况

 char a[50];
 fgets(a,200,stdin);

我需要退出程序并抛出错误,我不需要更改 200 来使用 sizeof()

标签: carraysbounds

解决方案


这是您在 C 中根本无法做到的事情之一。至少不是没有很多麻烦。您必须自己跟踪这些事情。因此,当您声明一个数组时,您将不得不存储大小并执行以下操作:

size_t size=1000;
int arr[size];
...
if(i>=size || i<0) {
    // Handle error
} else {
    // Do something with arr[i]
}

您可以使用以下结构进行抽象并使其更像 Java:

struct array {
    int *val;
    size_t size;
};

int getVal(struct array array, size_t index) {
    if(index>=array.size || index<0) 
        // Handle error
    else
        return array.val[index];
}

但是,如果您正在使用这样的结构,那么改用另一种语言可能是一个好主意。

如果我们看一下您的特定示例:

char a[50];
fgets(a,200,stdin); 

我很抱歉这么说,但fgets在这种情况下不可能抛出错误。


推荐阅读