是否有可能以某种方式使该程序崩溃?

2023-12-23

我目前正在大学的一门课程中学习 C。现在我们有一个任务要解决,但我不知道该怎么做。

任务如下所示: “是否有可能让这个程序因用户输入而崩溃?如果是这样,请解释一下这种情况。”

我们得到的程序非常简单,如下所示:

#include <stdio.h>  // Include to use printf, scanf

int main()
{
    // Define buffers to store user name and password
    char username[16];
    char password[16];

    // Read username and password from user input
    printf("Enter your name: ");
    scanf("%s", username);
    printf("Enter your password: ");
    scanf("%s", password);
    printf("[SHOUTING OUT LOUD] Hello, %s!\n", username);

    return 0;
}   

我已经发现,如果您使用的用户名长度超过 15 个字符,您可以让程序打印出密码。但这显然不是崩溃。 所以我还没有找到一种方法来使程序崩溃,但不知怎的,我很确定,有一种方法可以做到这一点。 有人有什么想法吗?

谢谢 :)


输入长度超过 15 个字符的用户名或密码can使程序崩溃,只是不能保证这样做。

当您写入超出数组范围时,您会调用未定义的行为 https://en.wikipedia.org/wiki/Undefined_behavior。宽松地说,这意味着您不能对程序将做什么做出任何假设。它可能会崩溃,可能会输出奇怪的结果,或者可能看起来工作正常。

只因为节目could崩溃并不一定意味着它will.


话虽这么说,考虑到您可能遇到的大多数编译器的工作方式,您输入的字符串越长,崩溃的可能性就越大。

局部变量通常分配在彼此相邻的堆栈上。例如,假设username紧接之前出现password在堆栈上。如果您输入 20 个字符的用户名,它将写过去username into password and username将不包含空终止字节。当您输入密码时,它将覆盖用户名前 16 个字符之后的任何字符。然后当您打印时username,您将看到您输入的内容的前 16 个字符,后面是密码。

现在假设您输入 100 个字符作为用户名。这将写过去username和过去password并且很可能会覆盖返回地址main。那么当main尝试返回会读取虚假地址,而尝试跳转到该地址会导致崩溃。

但同样,这都是特定于系统的,并且可能会根据您放置变量的类型/顺序、您调用的函数以及您用于编译的优化设置等而有所不同。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是否有可能以某种方式使该程序崩溃? 的相关文章

随机推荐

  • Mac OSX Lion/X11/CImg 库

    所以我正在尝试将 CImg 图像写入库合并到我的XCode项目 http cimg sourceforge net 但是 该库的头文件包含以下包含内容 并且 XCode 给出了此错误警告 include
  • 从 Github 导入 python 库

    我已经用 Python 编写了一些库以在我的项目中使用 我已将它们本地存储在我的系统上 也远程存储在 Github 上 现在每次我写一些代码时我都会使用sys path append 一开始帮助从系统中的目录导入我的库 我想知道是否有办法直
  • Twitter 状态 URL 正则表达式

    我有一个现有的正则表达式 http twitter com w status es d 我用它来确定 URL 是否是 Twitter 状态更新 URL 例如 http twitter com allWPthemes status 20404
  • 在 ASP.NET Core 5 中的 razor 视图中使用字形图标

    我正在将 ASP NET MVC 5 Web 应用程序迁移到 ASP NET Core 使用 NET 5 在以前的网络应用程序中 我使用了字形图标 但在新的应用程序中似乎没有可用的 我创建了一个新的ASP NET Core Web 应用程序
  • 如何在Eclipse控制台中获得回车而不换行效果?

    If I System out print something r 在控制台 我将光标返回到行首 最后在 System out print something r System out print any r I have anything
  • 使用双打时,为什么 (x / (y * z)) 与 (x / y / z) 不同? [复制]

    这个问题在这里已经有答案了 这部分是学术性的 因为就我的目的而言 我只需要四舍五入到小数点后两位 但我很想知道发生了什么会产生两个略有不同的结果 这是我编写的测试 旨在将其缩小为最简单的实现 Test public void shouldE
  • 在 VS 调试器中查看映射条目

    我想知道这是否是我的错误 误解 最有可能 或其他原因 我在 VS 2017 社区中有以下代码 include
  • 适用于 .NET 2.0 的类似 TPL 的库

    在 NET 4 0 中发现 Parallels 库后 我希望在我的 NET 2 0 应用程序中拥有类似的东西 NET 2 0 是否有任何并行编程帮助程序库可以简化常见任务 Threadpool http msdn microsoft com
  • 什么是 manifest.json 文件?在我的计算机上哪里可以找到它?

    我认为它适用于 chrome 我读到我可以在该文件中设置权限以避免开发时出现 XSS 错误 从原生 chrome json 文件到 chrome 扩展的 json 文件 有许多 json 文件可以满足您的 chrome 体验 其中大部分可以
  • iOS 多线程 - NSURLSession 和 UI 更新

    我有一个关于 iOS 多线程的一般问题 在我非常简单的测试应用程序中 我使用 NSURLSession 从服务器下载一些小图像并将它们呈现在表格视图中 在 NSURLSession 的回调中 检索图像后 我调用 tableview relo
  • 如何更改 CNContactPickerViewController 搜索栏的颜色

    我从视图控制器启动 CNContactPickerViewController 但如何更改其中搜索栏的文本颜色 导航栏是深蓝色的 在iOS11中默认搜索栏文本是黑色的 我更新了快速修复的方法 在呈现 CNContactPickerViewC
  • 具有调用私有方法的静态方法的 Ruby 类?

    我有一个包含许多静态方法的类 每个人都必须调用一个通用方法 但我试图不公开后一个方法 将其设置为私有将只允许从该类自己的实例进行访问 protected 似乎也不能解决这里的问题 如何隐藏 do calc 以免在静态上下文中被外部调用 使其
  • 从 php 调用 wordnet(PHP 的 Wordnet 类或 API)

    我正在尝试编写一个程序来查找两个文档之间的相似性 由于我只使用英语 所以我决定使用wordnet 但是我找不到将wordnet与php链接的方法 我无法从php找到任何wordnet api 我在论坛上看到有人说 Spudley 他从 ph
  • 如何在 Jest 中使用 axios 模拟 API 调用?

    我是测试新手 对使用 ES6 类模拟 API 和 axios 实例有一些疑问 我有一个index js import axios from axios export default class Pushkin constructor thi
  • 结构体和结构体第一个成员之间的指针别名[重复]

    这个问题在这里已经有答案了 C 中的指针别名通常是未定义的行为 因为严格别名 但 C11 标准似乎允许对指向结构的指针和指向结构的第一个成员的指针进行别名 C11 6 7 2 1 15 指向结构对象的指针 指向其初始成员 反之亦然 那么下面
  • 替代设置按钮

    我在我的android项目中使用这个代码 alertDialog setButton OK new DialogInterface OnClickListener public void onClick DialogInterface di
  • 并行流可以在不同的操作下正常工作吗?

    我正在阅读有关无国籍状态的文章 并在doc https docs oracle com javase 8 docs api java util stream package summary html Statelessness 如果流管道结
  • 在 .NET Framework 应用程序中使用 .NET Core 类库

    我的 NET Core 类库为我的数据库提供了一个模型 我的 WPF 应用程序需要引用该类库才能访问数据库 是否可以将 WPF 应用程序的引用添加到类库并使用此模型 我的类库基于 NET Core 3 1 构建 我的 WPF 应用程序基于
  • 如何使用 Citrix ShareFile API 进行搜索

    我正在为一个项目使用 Sharefile REST API 但遇到了问题 他们缺乏文档 到目前为止 我向 api 地址发送的 5 封电子邮件都没有得到答复 我想我会众包这个 我需要做的是按文件名搜索文件 并且它还必须有一个特定的parent
  • 是否有可能以某种方式使该程序崩溃?

    我目前正在大学的一门课程中学习 C 现在我们有一个任务要解决 但我不知道该怎么做 任务如下所示 是否有可能让这个程序因用户输入而崩溃 如果是这样 请解释一下这种情况 我们得到的程序非常简单 如下所示 include