c - C中的数组越界
问题描述
我想知道如何在 C 中捕获 IndexOutofbounds。我不希望我的程序异常退出,我想为用户打印一条消息以澄清错误
我如何检查这种情况
char a[50];
fgets(a,200,stdin);
我需要退出程序并抛出错误,我不需要更改 200 来使用 sizeof()
解决方案
这是您在 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
在这种情况下不可能抛出错误。
推荐阅读
- ios - 错误:分段错误:11(在项目“RxSwift”的目标“RxSwift”中)
- sql - [求解]连续两行的差异
- python - 如何将 A 类的方法存储在 A 类的 const 字典中?
- java - 对于服务类,我看到 android.content.ActivityNotFoundException: Unable to find explicit activity class
- xamarin.forms - Xamarin.Forms 网格布局
- sql-scripts - 如何使用其中一个参数对可变日期执行 SQL 语句?
- asp.net - 输入并刷新建议
- gradle - Gradle:发布 jar 时从依赖项中排除文件
- c - AVX2 和 AVX512 加速
- kubernetes - Authorization: Bearer 与 kubectl --token 不同吗?