我将错误的数组长度传递给了函数。为什么我没有收到错误消息?

2024-01-23

我是初学者,学习c语言大约20天。我一直在使用 Youtube 来做这件事。我看到一个视频,其中有人告诉我,如果将数组传递给函数,那么第二个变量应该是数组的长度。我觉得这是不对的,我尝试了下面给出的代码。

#include <stdio.h>
#include <conio.h>

void name(int[], int);

int main() {
    int arr[] = {1,2,3};
    name(arr, 5);
    getch();
    return 0;
}

void name(int a[], int i) {
    printf("%d", i);
}

它没有给我任何错误。那么,这是正确的吗?我的意思是,第二个变量对于数组长度真的有必要吗?


我没有给我任何错误吗?不,在这种情况下编译器不会产生任何错误,因为您只是传递元素值的数量这超过了数组元素, 但如果name()函数尝试访问越界元素然后导致未定义的行为。例如

void name(int[], int);

int main() {
    int arr[] = {1,2,3};
    name(arr, 5);
    getch();
    return 0;
}

void name(int a[], int i) {
    printf("%d", i); /* printing variable i value is fine */
    for(int row = 0; row < i; row++) {
         printf("%d\n",a[row]);/* it cause UB when access a[3],a[4].. */

}

正确的过程是找到数组中元素的编号,存储到一个变量中并将该变量传递给函数,而不是某个随机数。例如

#include <stdio.h>
#include <stdio.h>
#include <conio.h>
void name(int[], int);
int main() {
    int arr[] = {1,2,3},ele;
    ele = sizeof(arr)/sizeof(arr[0]);
    name(arr, ele);
    getch();
    return 0;
}

void name(int a[], int ele) {
    printf("no of element in array : %d\n", ele);
    for(int row =0; row<ele; row++) {
      printf("%d\n",a[row]);
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我将错误的数组长度传递给了函数。为什么我没有收到错误消息? 的相关文章

  • 在哪里使用 EF6 订阅 ObjectMaterialized?

    我正在尝试将我的上下文订阅到以下 OnjectMaterialized 事件this https stackoverflow com a 3756842 2835713 像这样 IObjectContextAdapter this Obje
  • 简单的C问题

    作为我正在进行的项目的一部分 我必须开始学习 C 我已经开始解决其中的 欧拉 问题 并且遇到了麻烦 我必须找到 1000 以下的所有 3 或 5 的倍数之和 有人可以帮助我吗 谢谢 include
  • 数据结构的优化存储以实现快速查找和持久化

    Scenario 我有以下方法 public void AddItemSecurity int itemId int userIds public int GetValidItemIds int userId 最初我正在考虑表单上的存储 i
  • 在列表中查找匹配项的最简洁方法

    在列表中查找内容的最佳方式是什么 我知道 LINQ 有一些不错的技巧 但我们也可以获取有关 C 2 0 的建议 让我们对这个常见的代码模式进行最佳重构 目前我使用这样的代码 mObjList is a List
  • C/C++ 程序是在 CPU 上运行还是在内核上运行?

    我已经编程很多年了 但有一件事我一直不明白 有两种类型的编程语言 编译型语言和解释型语言 编译型语言首先需要编译成解释型语言 然后才能执行 例如 C C 需要先编译为机器语言 然后才能执行 我的问题来了 谁真正运行已编译的 C C Wind
  • 为什么在 OpenCV 中访问该矩阵时出现内存错误?

    我只是想写入给定大小的矩阵 当我在 Valgrind 中运行该程序时 出现内存错误 如下所示 主要 cpp include
  • 函数的不明确的引用/值版本

    考虑以下函数原型 void Remove SomeContainer Vec const std size t Index SomeContainer Remove SomeContainer Vec const std size t In
  • Windows CE 6.0 和运行时链接到调试 DLL /MDd

    我在 x86 PC 上使用 Windows CE 6 0 R3 我已经为该平台构建了 NK bin 和 SDK 但我有一些问题需要了解如何使用 MTd 调试 DLL 构建控制台应用程序 如果我尝试构建这个 main c with MDd i
  • 不能使用函数名称距离

    以下代码可以正常编译 include
  • 有没有办法让我的程序用更少的代码运行?

    我为学校作业编写了以下代码 它编译并打印所有正确的消息 但出于我自己的好奇心 我想知道我的代码是否可以缩短并且仍然有效 我尝试了 signal 而不是 sigaction 但我听说 sigaction 比 signal 更受青睐 此外 此任
  • Visual Studio 2015 C# 找不到参考

    我在使用 Visual Studio 2015 和 C 时遇到了问题 在同一解决方案中添加对其他项目的引用时 Visual Studio 找不到所有类 例如 我创建了一个单元测试项目 我添加了对我创建的通信项目的引用 库中有 10 个类 但
  • MSVC10 /MP 在项目中跨文件夹构建非多核

    我希望有人指出我们所遇到的错误或解决方法 使用 MP 编译项目时 似乎仅同时编译同一文件夹中的文件 我使用进程资源管理器来滑动命令行并确认行为 项目过滤器似乎对同时编译的内容没有影响 项目结构disk Folder project vcxp
  • 我可以将特定警告视为错误吗?

    以下是我有时在学生代码中看到的模式的简化版本 bool foobar int a int b if a lt b return true 当然 真正的代码要复杂得多 Visual Studio 报告警告 C4715 并非所有控制路径都会返回
  • memccpy 返回比 src 起始地址更低的内存地址

    我有一个学校项目 我必须重新编码memccpy 功能 我使用 2 个程序来检查我的代码是否正常工作 第一个是只有一个主程序的小程序 第二个程序是另一个学生开发的 可以找到here https github com yyang42 mouli
  • 在 OpenGL 中使用不同的着色器程序?

    我必须在 OpenGL 中针对不同的对象使用两个不同的着色器程序 我发现我必须使用glUseProgram 在不同的着色器程序之间切换 但对此没有太多信息 鉴于我有两个用于不同对象的不同着色器程序 如何为每个着色器程序生成和绑定 VAO 和
  • Ajax 函数在重定向后不保存滚动位置

    正如标题所述 我编写了一个 ajax 函数 该函数应该滚动到用户在重定向之前所在的位置 我写了一个alert对于测试场景 它确实触发了 但滚动不断回到顶部 我在这里做错了什么 JavaScript ajax type GET url Adm
  • DataContractJsonSerializer 包含元素类型子类型的通用列表

    我要使用DataContractJsonSerializer用于 JSON 序列化 反序列化 我在 JSON 数组中有两种对象类型 并希望将它们都反序列化为相应的对象类型 具有以下类定义 DataContract public class
  • 将华氏温度转换为摄氏度的 C 程序始终打印零

    我需要一些关于用 C 语言将华氏温度转换为摄氏度的程序的帮助 我的代码如下所示 include
  • 来自资源中 ImageSource 的 System.Drawing.Image

    我的问题与这个非常相似 wpf图像资源以及运行时在wpf控件中更改图像 https stackoverflow com questions 940592 wpf image resources and changing image in w
  • 使用 QTestLib 时抑制 qDebug

    我正在向 Qt 中的项目添加单元测试 并希望使用 QTestLib 我已经设置了测试并且它们运行良好 问题是在项目中我们重写了 qDebug 以输出到我们自己的日志文件 这在运行应用程序时效果很好 问题是当我测试类时 它有时会开始记录 然后

随机推荐

  • 在 C++ Microsoft Visual Studio 2010 中调试器多个环境变量

    在设置环境变量时 我在 Visual Studio 2010 Professional C 调试器中遇到了一个非常简单的问题 描述于 http msdn microsoft com en en library kcw4dzyf aspx h
  • 是否可以使用eclipse仅构建一次java项目并共享?

    是否有可能实际构建一个包含java代码的maven项目 构建一次并且二进制文件可以共享 问题 我尝试构建的项目大约需要 3 4 小时 并且需要高互联网带宽 我正在尝试检查在其他几台机器中重新使用这个构建项目的可能性 我之前曾处理过涉及 ma
  • 如何在 using 语句中使用对象初始值设定项?

    有没有什么方法可以重构此代码 以便不必使用临时变量 而仍然使用与对象初始值设定项关联的语法糖 FrmSomeForm someTempForm new FrmSomeForm SomePropA A SomePropB B SomeProp
  • Go 闭包变量作用域

    我正在阅读 CreateSpace Go 2012 编程简介 在第 86 页我发现了这个邪恶的魔法 func makeEvenGenerator func uint i uint 0 return func ret uint ret i i
  • TypeScript - 将动态属性名称传递给子级

    我正在开发一个带有嵌套路由的路由库 我试图定义一个推断父路径的子处理函数 原因是我有另一种类型 可以从字符串推断动态路径参数 例如 users id to id string 因此 我希望能够将推断的路径参数从父路由传递到每个子路由处理函数
  • 使用 Jasmine 在 Angular 5 中进行单元测试模型绑定

    我正在尝试编写一个单元测试来测试从组件方法调用返回的 JSON 数据是否成功绑定到打字稿模型 我的模型如下所示 export interface IPlayerAccount playerId number name string phon
  • 如何从 TFS 源代码管理中排除特定文件

    我们有多个配置文件 app DEV config app TEST config 等 和一个将正确的配置文件复制到 app config 的预构建事件 显然 配置特定文件位于源代码管理中 但目前 App Config 也是如此 但不应该如此
  • 从后台工作程序中的循环更新文本框

    我知道这个问题有人问过 至少从我到目前为止在这里发现的情况来看 但我无法真正理解它 已经尝试过 msdn 的示例 但仍然没有成功 这是我想要做的 我有一个连接到 TLL 标尺的 USB 计数器 我想在循环中不断读取值并将读数写入文本框而不阻
  • 如何从方法返回对对象的 const 引用? [复制]

    这个问题在这里已经有答案了 public Item getItem ulong itemId Item item items itemId return item 现在的问题是 被调用者getItem必须能够检索以下信息item持有 但不修
  • 多处理代码重复运行

    所以我希望使用 python 多处理模块创建一个进程 我希望它成为更大脚本的一部分 我还想从中得到很多其他东西 但现在我会满足于此 我从以下位置复制了最基本的代码多处理文档 https docs python org 3 6 library
  • 在 ExtJS 4 中具有相同视图并多次存储的最佳实践

    我想在 ExtJS 应用程序中同时拥有不同商店的同一视图的不同实例 目前 我在视口中创建了同一视图 Ext view View 的多个实例 但是在每个视图中都有不同的商店的最佳实践是什么 我发现的每个示例都在使用控制器的stores Con
  • MapKit (Swift 4) Xcode 9.2 - “无法从角 4 插入合法归属”

    我正在做一个处理 MapKit 的项目 我的问题是 当我运行该应用程序时 我收到 无法从第 4 角插入法律归属 的消息 错误 我可以采取什么解决方案来解决这个问题 error https i stack imgur com jw7rk pn
  • 使用 Tf Estimator 时如何获得可训练变量计数?

    我使用 tf 估计器框架创建了 CNN 分类器模型 但是 我无法访问模型中定义的变量 tf trainable variables 始终返回 0 如何使用 tf 估计器访问变量 特别是 我如何获得参数总数的计数 将所有变量的维度相加 谢谢
  • 自动使用相对于函数调用位置的 __LINE__ 和 __FILE__

    我有一个函数log text 这一切所做的就是写 text到数据库 我想包括 LINE and FILE 但不想像我现在那样每次都将其作为参数包含在内 function log text file null line null write
  • 无法使用面向 x64 的 VC++/VS2010 进行编译:LNK1158:无法运行 cvtres.exe

    作为一名 C 开发人员 我最近决定尝试编写一些 C 程序 主要是因为我发现了一个我想使用的有趣的 C API 几天前我写了一个非常简单的程序 在 x64 目标平台上编译它 运行它 一切都很顺利 然而 昨天我更改了一些代码 尝试编译它 但链接
  • ruby - 捆绑包安装/更新太慢

    我刚刚在 virtualbox 中运行的虚拟 ubuntu 12 04 32 位上安装了 RVM Ruby Rails 等 现在我遇到了我的第一个 Rails 项目的问题bundle install or bundle update需要很长
  • 连接到不存在的 mongodb 服务器不会抛出异常

    我正在尝试使用 Java 的 MongoDB 驱动程序 所以我只是创建了一个简单的应用程序来连接到 MongoDB 服务器并选择一个数据库 所以我创建了一个实例MongoClient并选择了一个 数据库 try MongoClient cl
  • 查找哪一行重复 data.frame 中的哪一行

    我有一个像这样的数据框 data frame matrix c 11 13 21 23 11 13 11 13 31 33 41 43 31 33 byrow TRUE ncol 3 现在我想知道哪一行是哪一行的重复项 返回具有重复行号最低
  • 将 docx 转换为 markdown 时如何避免 markdown 上的 img 大小标签?

    我正在使用 pandoc 1 16 0 2 转换 docx 文件 一切都很好 除了每个图像之后 尺寸属性在 teh 中显示为文本 media media image4 png width 3 266949912510936in height
  • 我将错误的数组长度传递给了函数。为什么我没有收到错误消息?

    我是初学者 学习c语言大约20天 我一直在使用 Youtube 来做这件事 我看到一个视频 其中有人告诉我 如果将数组传递给函数 那么第二个变量应该是数组的长度 我觉得这是不对的 我尝试了下面给出的代码 include