如果我在全局范围内声明一个没有大小的数组,会得到什么?

2024-01-01

In 答案之一 https://codegolf.stackexchange.com/a/5163/38214 in C 语言打高尔夫球的技巧 https://codegolf.stackexchange.com/q/2203/38214,我看到了这段代码(非高尔夫版本):

s[],t;

main(c){
    for(scanf("%*d "); ~(c=getchar()); s[t++]=c)
        putchar(s[t]);
}

我认为上面的程序展示了 UB(但是谁在乎代码高尔夫呢?)。但我不明白的是s[]在全球范围内。我知道当未指定全局变量的类型时,它默认为int。我创建了一个小程序,它的编译结果令人惊讶:

#include <stdio.h>

int s[];
int main(void)
{
    printf("Hello!");
}

尽管它发出一个警告:

prog.c:23:5: warning: array 's' assumed to have one element [enabled by default]
 int s[];
     ^
  • What is s在上面的程序中?是不是一个int*或者是其他东西?
  • 这在任何地方都有用吗?

What is s在上面的程序中?它是 int* 还是其他什么?

s是一个不完整的类型。这就是为什么你不能sizeof它。正如 @BLUEPIXY 所建议的,它被初始化为零,因为它是在全局范围内声明的,从而进行了“暂定定义”。

int i[];
数组 i 的类型仍然不完整,隐式初始化程序导致它有一个元素,该元素被设置为 程序启动时为零。

Now,

这在任何地方都有用吗?

如果你只是使用它是没有用的s[0]因为那时你会去s;直接地。但是,如果您需要一个具有一定大小的数组并且您不关心 UB,那么“没问题”。

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

如果我在全局范围内声明一个没有大小的数组,会得到什么? 的相关文章

  • OpenCV Visual Studio ntdll.dll

    我尝试在 Visual Studio 2013 上使用 OpenCV 2 4 10 创建一个项目 但由于以下异常 到目前为止我运气不佳 请建议帮助 TIA letstryitonemoretime exe Win32 Loaded C Us
  • gtest 和 gmock 有什么区别?

    我试图理解的目的google mock Google 的 C 模拟框架 https github com google googletest blob master googlemock README md 我已经与gtest较早 但我还是
  • CMake 和 Visual Studio:如何获得快速、安静的命令行构建?

    我有一个 cmake 项目 它成功地完成了我想要的一切 但我有大约 100 个文件 当我只需要重新编译一个文件时 我厌倦了每次看到生成的巨大输出 每个文件 30 行 明确地说 我正在编译cmake build 得到这个结果 我需要传递给编译
  • 使用静态类型代替变量

    当您的项目不使用命名空间时 有什么方法可以告诉编译器使用静态类型而不是变量吗 例如 我有一个名为 User 的类 它具有各种静态和非静态方法 假设调用了其中一个静态方法GetUser 我想称之为User GetUser 方法来自一个方法 该
  • 使用 Selenium for C# 登录 Facebook

    我一直在使用 Selenium C 框架并尝试进行 facebook 登录 但没有任何运气 这是我到目前为止得到的 基于这篇文章 使用 Selenium 测试 Facebook Connect 应用程序 https stackoverflo
  • 正则表达式删除某些字符周围不需要的空格

    我正在尝试从 JavaScript 文件中删除一些不需要的空格 并在将文件发送到客户端之前使用 C 和 Regex 组合文件 我有一个JavascriptHandler处理 js 文件 效果很好 这是我用来 打包 JavaScript 的函
  • 如何在 Java 中创建要打印到 JFrame 的 JLabels 数组

    我正在尝试制作一系列标签 每个标签都有一个来自函数的不同值 我不知道要使用的标签的确切数量 我的意思是可以打印任意数量的值 请帮我做这件事 很简单 只需一个方法返回一个数组或一些 JLabels 集合 并将它们全部添加到您的 JCompon
  • 如何防止字符串被截留

    我的理解 可能是错误的 是 在 C 中 当你创建一个字符串时 它会被实习到 实习生池 中 这保留了对字符串的引用 以便多个相同的字符串可以共享操作内存 但是 我正在处理很多很可能是唯一的字符串 一旦完成每个字符串 我需要将它们从操作内存中完
  • 替换 JSON 中的转义字符

    我想用空格替换 JSON 字符串中的 字符 我怎样才能做到这一点 我发现从 JSON 字符串中删除所有转义字符的最简单 最好的方法是将字符串传递到正则表达式 Unescape 方法 此方法返回一个没有转义字符的新字符串 甚至删除了 n t
  • 获取给定EntityType的导航属性

    我在用VS2010 EF4 0 需要如下功能 private string GetNaviProps Type entityType eg typeof Employee NorthwindEntities en new Northwind
  • NumPy 根据另一个数组中的值对第三个数组中的每个匹配元素求和一个数组

    我有两个 numpy 数组 一个包含值 另一个包含每个值类别 values np array 1 2 3 4 5 6 7 8 9 10 valcats np array 101 301 201 201 102 302 302 202 102
  • 在 ncurses 中使用退格键

    我设置了一个简单的 ncurses 程序 它使用 getch 一次读取一个字符并将它们复制到缓冲区中 我遇到的问题是检测到按下退格键 这是相关代码 while buffer i c getch EOF i if c n break else
  • 在不使用 Thread.Sleep c# 的情况下延迟发送电子邮件

    我有一个 for 循环 它循环并每个循环发送一封电子邮件 现在我正在使用 thread sleep 但我希望用户仍然能够与程序交互 只需取消该循环即可 是否可以在不使用 thread sleep 的情况下做到这一点 您是否在 UI 线程上运
  • 简单的文档管理系统和API [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Qt:将拖放委托给子级的最佳方式

    我在 QWidget 上使用拖放 我重新实现了 DragEnterEvent dragLeaveEvent dragMoveEvent 和 dropEvent 效果很好 在我的 QWidget 中 我有其他 QWidget 子级 我希望它们
  • C 中的 N 依赖注入 - 比链接器定义的数组更好的方法?

    Given a 库模块 在下文中称为Runner 它作为可重复使用的组件 无需重新编译 即静态链接库 中应用程序分区架构的 而不是主分区 请注意 它仅包含main 出于演示目的 Given a set 顺序无关 调用的其他模块 对象Call
  • 需要使用 openssl 加密和解密文件的示例 C 代码

    我正在用 Linux C 编写代码 我需要使用以下命令来加密和解密文件 openssl 目前 我使用系统命令 des3 e nosalt k 0123456789012345 in inp file out out file 进行加密 使用
  • 将小数格式化为两位或整数

    对于 10 我想要 10 而不是 10 00 对于 10 11 我想要 10 11 没有代码可以实现吗 即通过指定格式字符串类似于 0 N2 decimal num 10 11M Console WriteLine num ToString
  • 在代码中而不是 XAML 中呈现 UserControl

    我想用RenderTargetBitmap将 UserControl 呈现为位图 而无需为其编写 XAML 当我这样做时 我得到一张空白图像 我是否错过了关键的一步 ValTool Controls VideoFisheyeOverlayC
  • 致命错误 C1001:编译器中发生内部错误(编译器文件“msc1.cpp”,第 1325 行)

    当我编译代码时 错误指向以下类 该错误在两行上突出显示 如下所示 tm validFrom tm validUntil struct t SslCertData final struct t Contact TCHAR Organizati

随机推荐

  • 在正则表达式中匹配两个单词及其之间的一些字符

    我想在没有时对字符串进行匹配abc后面跟着一些字符 可能没有 并以 com 我尝试了以下方法 abc com or abc com or
  • 如何在 useminPrepare 中为 html 文件中的每个块定义单独的流程?

    我们在 index html 中定义了 2 个块 一个用于第三方库 另一个用于我们的应用程序文件 由于第 3 方库已经缩小 我们只想将它们连接起来 而不是丑化 我怎样才能做到这一点useminPrepare
  • 计算 ggplot2 stat_binhex 中 bin 的百分比

    我正在生成不同组的数据点的 binhex 图 每个组可能有不同的总点数 因此我希望它不是每个 bin 值的绝对点数 而是该组内总点数的百分比 这是我目前正在尝试的 d lt data frame grp c rep a 10000 rep
  • 全局安装 npm

    是否可以全局安装 npm 这是一个好主意吗 我使用 npm install 命令安装了 npm 并能够运行 npm start 然后 将我的项目发布到 github 后 我想确保如果有人克隆它 它也能运行 所以我将它克隆到我机器上的另一个目
  • .Net KeyEventArgs 返回与输入

    在 c net 应用程序中使用以下代码 字符串键 e KeyCode ToString 在 net 1 1中键 输入 在 net 3 5中键 返回 我的问题是它们为什么不同 The Keys枚举具有相同的值Enter and Return
  • Rails 每当 gem:每月 20 日

    我在互联网上搜索了这一点 并且文档并没有真正具体讨论每月的工作 所以我希望这里有人能告诉我如何做到这一点 我已经安装了whenever gem 我需要知道的是正确的语法 every month on gt 20th at gt 02 00
  • 在文件中写入大量数据的最快方法

    我正在尝试创建随机实数 整数 字母数字 字母字符串 然后写入文件直到文件大小达到10MB 代码如下 import string import random import time import sys class Generator def
  • 何时使用 Xcode 分布式构建功能

    我在一个小型 iPhone 开发团队工作 在我们的办公室里 我们在任何时候至少有 4 个 XCode 副本在网络上运行 考虑让每个人都运行它 我们使用标准 WIFI 交换机联网 因此网络速度和延迟不如有线网络 只是想知道 使用分布式构建是否
  • STL容器如何折叠?

    我需要 Haskell 的类似物foldl功能可折叠任何 STL 容器 预期签名如下 template Iterator FoldingFunction Result Result foldl Iterator begin Iterator
  • Angular/SignalR 错误:无法完成与服务器的协商

    对我的服务器使用 SignalR 对我的客户端使用 Angular 当我运行客户端时 我收到以下错误 zone js 2969 OPTIONS https localhost 27967 chat negotiate 0 Utils js
  • 如何捕获每个 PID 的网络数据包?

    有人知道一种简单的方法来要求Linux 显示来自 来自google chrome的每个互联网数据包 或 显示来自 来自PID 10275的telnet进程的每个互联网数据包 吗 telnet 示例不太有用 因为我只能使用wireshark
  • React-native ios Podfile 问题与“use_native_modules!”

    在我的反应本机项目中 电子邮件受保护 cdn cgi l email protection 在我运行的 ios 目录中pod install并得到这个错误 Invalid Podfile file no implicit conversio
  • 允许使用应用程序内主页按钮导航至主页吗?

    我想知道应用程序内主页按钮的实现 该按钮可以将您从任何页面返回到主页 据我记得 WP7 开发指南不允许这样做 但我找不到任何相关的书面信息 有谁知道这写在哪里吗 通常不鼓励使用主页按钮 msdn源 http msdn microsoft c
  • C 中的 Malloc 与结构

    我有一个结构 struct numbers struct char numbers array 1000 struct numbers struct numbers some size 创建struct后 有一个整数作为输入 scanf d
  • 无法在构造函数中分配 this [重复]

    这个问题在这里已经有答案了 我正在尝试合并来自的道具values into this 以下会引发错误 我怎样才能做到这一点 this this values 你可以延长this with 对象 分配 https developer mozi
  • 如何处理自定义 PyYAML 构造函数中的递归?

    PyYAML 可以处理常规 python 对象中的循环图 例如 片段 1 class Node pass a Node b Node a child b b child a We now have the cycle a gt b gt a
  • 使用 Python,如何获取 Google protobuf 消息的二进制序列化?

    我在中看到函数 SerializeAsStringprotobuf Python 文档 http code google com apis protocolbuffers docs reference python google proto
  • selenium webdriver 支持 IE10 Metro?

    selenium webdriver 是否支持 IE10 Metro 默认情况下 测试在桌面模式下运行 有什么办法可以在 Metro 模式下测试吗 不 在撰写本文时 还不支持使用 Metro 界面进行自动化 对不起 然而 Selenium
  • 获取 User.identity 的名字和姓氏

    我有一个使用 Windows 身份验证设置的 Intranet 应用程序 我需要在标题中显示用户名和用户的姓名首字母 例如 欢迎j史密斯JS 到目前为止我做了什么 div class header profile name Welcome
  • 如果我在全局范围内声明一个没有大小的数组,会得到什么?

    In 答案之一 https codegolf stackexchange com a 5163 38214 in C 语言打高尔夫球的技巧 https codegolf stackexchange com q 2203 38214 我看到了