在运行时将 char[x] 大小调整为 char[y]

2024-02-25

好吧,我希望我能正确解释这一点。 我有一个结构:

typedef struct _MyData
{
   char Data[256];
   int  Index;
} MyData;

现在,我遇到了一个问题。大多数时候MyData.Data256 就可以了,但在某些情况下,我需要扩展它可以容纳不同大小的字符数量。 我无法使用指针。 有没有办法在运行时调整数据大小?如何? 代码受到赞赏。

EDIT 1:

虽然我非常感谢所有的评论,但“也许试试这个……”或“这样做”,或“你是错的……”评论没有帮助。代码就是这里的帮助。如果您知道答案,请发布代码。

请注意:

  1. 我无法使用指针。请不要试图找出原因,我就是做不到。
  2. 该结构被注入到另一个程序的内存中,这就是不能使用指针的原因。

抱歉在这里有点粗暴,但我在这里问这个问题是因为我已经尝试了所有认为可能有效的不同方法。 再次,我正在寻找代码。在这一点上,我对“可能有用......”或“你是否考虑过这个......”不感兴趣

再次感谢您并表示歉意。

EDIT 2

为什么如此设置?


您可以使用灵活的数组成员

typedef struct _MyData
{
   int  Index;
   char Data[];
} MyData;

这样您就可以分配适量的空间

MyData *d = malloc(sizeof *d + sizeof(char[100]));
d->Data[0..99] = ...;

稍后,您可以释放并分配另一块内存并创建一个指向MyData指向它,此时灵活数组成员中将有更多/更少的元素(realloc)。请注意,您还必须在某个地方保存长度。

在 C99 之前的时代,没有灵活的数组成员:char Data[]被简单地视为一个类型不完整的数组,编译器会对此抱怨。在这里我向您推荐两种可能的方法

  • 使用指针:char *Data并使其指向分配的内存。这不会像使用嵌入式数组那么方便,因为您可能需要进行两次分配:一次用于结构体,另一次用于指针指向的内存。如果程序中的情况允许,您也可以将结构分配在堆栈上。
  • Using a char Data[1]相反,但将其视为更大的对象,以便它覆盖整个分配的对象。这是正式未定义的行为,但却是一种常见技术,因此与编译器一起使用可能是安全的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在运行时将 char[x] 大小调整为 char[y] 的相关文章

  • 有没有快速创建集合的方法?

    目前我正在创建一个像这样的新集 std set a s s insert a1 s insert a2 s insert a3 s insert a10 有没有办法创建s在一行 int myints 10 20 30 40 50 std s
  • 在 C# 中按元素相乘数组具有意想不到的性能

    我想找到按元素相乘两个数组的最佳方法 这是更广泛项目的一部分 其中性能而不是唯一的考虑因素 我今天开始用 C Linqpad 编写一些函数 因此它还没有以任何方式进行优化 下面代码的输出如下 Environment ProcessorCou
  • 更改 Qt OpenGL 窗口示例以使用 OpenGL 3.3

    我正在尝试更改 Qt OpenGL 示例以使用更现代的 opengl 版本 330 似乎合适 所以我做了 在 main cpp 上设置版本和配置文件 设置着色器版本 更改着色器以使用统一 它现在构建没有任何错误 但我只看到一个空白窗口 我错
  • VS 程序在调试模式下崩溃,但在发布模式下不崩溃?

    我正在 VS 2012 中运行以下程序来尝试 Thrust 函数查找 include cuda runtime h include device launch parameters h include
  • ASP.NET Web API 客户端 ProgressMessageHandler Post 任务卡在 WinForm 应用程序中

    我在用着HttpClient and ProgressMessageHandler来自MS ASP NET Web API 客户端库 http nuget org packages Microsoft AspNet WebApi Clien
  • 信号处理程序有单独的堆栈吗?

    信号处理程序是否有单独的堆栈 就像每个线程都有单独的堆栈一样 这是在 Linux C 环境中 来自 Linux 手册页signal 7 http kernel org doc man pages online pages man7 sign
  • 动态生成的控件 ID 返回为 NULL

    我可以在 Page PreInit 函数中创建动态控件 如何检索控件及其 ID 我的 C 代码用于创建动态控件之一 var btn new WebForms Button btn Text btn ID Addmore btn Click
  • 如何获取 QTableView 的标题列表?

    我有一个QTableView我的对话框中的对象 我需要访问该表的水平标题并将它们放入QStringList object 尽管进行了大量搜索 但我在 Qt 文档中找不到如何获取此标头列表 编辑 我发现的最接近的地方是this https w
  • 在 JSQMessagesViewController 中显示 LocationMediaItem

    我刚刚尝试实施LocationMediaItem in my Xamarin iOS应用程序使用JSQMessagesViewController 一切都很顺利 唯一的问题是UICollectionView应该显示位置的单元格永远停留在加载
  • std::forward_as_tuple 将参数传递给 2 个构造函数

    我想传递多个参数以便在函数内构造两个对象 以同样的方式std pair
  • C# 构建一个 webservice 方法,它接受 POST 方法,如 HttpWebRequest 方法

    我需要一个接受 POST 方法的 Web 服务 访问我的服务器正在使用 POST 方法 它向我发送了一个 xml 我应该用一些 xml 进行响应 另一方面 当我访问他时 我已经使用 HttpWebRequest 类进行了管理 并且工作正常
  • 检查 RoutedEvent 是否有任何处理程序

    我有一个自定义 Button 类 当单击它时 打开特定窗口 它总是执行相同的操作 我添加了一个可以在按钮的 XAML 中分配的 Click 事件 就像常规按钮一样 当它被单击时 我想执行 Click 事件处理程序 如果已分配 否则我想执行默
  • 每个租户的唯一用户名和电子邮件

    我正在使用以下代码编写多租户应用程序ASP NET Core 2 1 我想覆盖默认的与用户创建相关的验证机制 目前我无法创建多个具有相同的用户UserName My ApplicationUser模型有一个名为TenantID 我想要实现的
  • 如何分析组合的 python 和 c 代码

    我有一个由多个 python 脚本组成的应用程序 其中一些脚本正在调用 C 代码 该应用程序现在的运行速度比以前慢得多 因此我想对其进行分析以查看问题所在 是否有工具 软件包或只是一种分析此类应用程序的方法 有一个工具可以将 python
  • 如何在c的case语句中使用省略号?

    CASE expr no commas ELLIPSIS expr no commas 我在c的语法规则中看到了这样的规则 但是当我尝试重现它时 int test float i switch i case 1 3 printf hi 它失
  • C# 中的 strstr() 等效项

    我有两个byte 我想找到第二个的第一次出现byte 在第一个byte 或其中的一个范围 我不想使用字符串来提高效率 翻译第一个byte to a string会效率低下 基本上我相信就是这样strstr 在 C 中做 最好的方法是什么 这
  • .NET Core 中的跨平台文件名处理

    如何处理文件名System IO以跨平台方式运行类以使其在 Windows 和 Linux 上运行 例如 我编写的代码在 Windows 上完美运行 但它不会在 Ubuntu Linux 上创建文件 var tempFilename Dat
  • IEnumerable.Except 不起作用,那么我该怎么办?

    我有一个 linq to sql 数据库 非常简单 我们有 3 个表 项目和用户 有一个名为 User Projects 的连接表将它们连接在一起 我已经有了一个获得的工作方法IEnumberable
  • 在简单注入器中解析具有自定义参数的类

    我正在使用以下命令创建 WPF MVVM 应用程序简易注射器作为 DI 容器 现在 当我尝试从简单注入器解析视图时遇到一些问题 因为我需要在构造时将参数传递到构造函数中 而不是在将视图注册到容器时 因此这不是适用的 简单注入器将值传递到构造
  • 使我的 COM 程序集调用异步

    我刚刚 赢得 了在当前工作中维护用 C 编码的遗留库的特权 这个dll 公开使用 Uniface 构建的大型遗留系统的方法 除了调用 COM 对象之外别无选择 充当此遗留系统与另一个系统的 API 之间的链接 在某些情况下 使用 WinFo

随机推荐

  • 使用javascript或jquery动态添加Div到html页面

    我想要一个主 div 并且能够动态添加与主 div 处于同一级别的新 div 像这样的事情 div div div div 任何帮助都会很棒 parent div append div div 或者如果你想要新创建的 div s 出现在其他
  • 使用 XOR 和补码解析位

    当向量中的所有其他数字恰好出现三次时 我无法找到仅出现一次的数字 class Solution public int singleNumber vector
  • JSP EL 和自动完成

    在我的 servlet 中 request setAttribute list myList 在我的 Jsp 中
  • 适用于 Android 的 Firebase Cloud Messaging 中的 InvalidRegistration 错误

    我正在开发一个使用推送通知功能的 Android 应用程序 我需要从服务器推送 我使用 Firebase 这是我第一次使用 Firebase 但是当我使用 PHP 和 CURL 从服务器推送时 它给了我无效的注册错误 我像这样在 Andro
  • 将配置单元行分组到此行的数组中

    我有一个如下表 User String Alias String JohnDoe John JohnDoe JDoe Roger Roger 我想将用户的所有别名分组在一个数组中 在一个新表中 如下所示 User String Alias
  • 使用 Openshift 的裸域

    我在使用 Google 的 GAE 云产品时遇到的最大问题之一是它无法处理裸域 它可以处理子域 www 但不能处理裸域 这是一个大问题 因为您的应用程序将无法处理客户端请求中的 PATH 或子目录 因为它在 DNS 转发到 www 子域期间
  • 在 R 中创建空间集群 LISA 地图

    我想创建一张显示现象的局部空间集群的地图 最好使用局部莫兰 LISA 在下面的可重现示例中 我使用以下方法计算本地莫兰指数spdep但我想知道是否有简单的方法来映射簇 最好使用ggplot2 Help library UScensus200
  • 即使添加控制台插件后,console.log 在 iOS Phonegap 应用程序中也不起作用

    我在 Cordova CLI 中创建了一个 Phonegap iOS 应用程序 我已经添加了控制台插件 是的 deviceready 被成功调用 但是 console log 不起作用并且不会在 XCode 日志中打印任何内容 插件安装 科
  • AWS X-Ray GoLang Lambda 到 lambda 跟踪并显示在服务地图中

    我有一个 API 网关 它在 Go 中调用 Lambda 函数 1 和 Lambda 函数 2 我想看到这两个函数加入到服务映射中 到目前为止 我能够做到这一点的唯一方法是创建一个自定义分段 例如称为 父级 并从此上下文创建一个子分段 例如
  • 无法让 pip install 在 EMR 集群上运行

    我有一个 EMR emr 5 30 0 集群 我尝试从 S3 中的引导文件启动 引导程序文件的内容是 bin bash sudo pip3 install user matplotlib pandas pyarrow pyspark 我的
  • Android 4.4 KitKat 未收到 cookie

    在我的应用程序中 我向服务器发送 POST 请求 并从服务器接收响应 我从响应中收集了不同的 cookie 特别是用户信息 因此 我发送登录请求并在服务器响应后接收 cookie 以保持登录 在 Android 4 3 及更低版本中 我可以
  • Web 服务作为 JAR 文件,还是另一个 WAR 中的 WAR?

    我有一个在 Tomcat 6 上运行的 SOAP Web 服务 使用 Spring Web Services Java 现在我想将此 Web 服务合并到另一个大型 Web 应用程序中 使用 Spring Java 而不是 Web 服务 并使
  • 如何使用 mDNS 将所有子域路由到单个主机?

    我有一个开发网络服务器托管为 myhost local 它是使用 Bonjour mDNS 找到的 服务器正在运行 avahi daemon 网络服务器还希望处理其自身的任何子域 例如 cat myhost local 和 dog myho
  • 如何在Java中将一个双精度数按点分割成两个十进制数?

    尝试按点将双精度数分成两个小数部分 像这样 1 9变成1和9 0 16分为0和16 这就是我所做的 但似乎有点多余 最好的方法是什么 原始编号始终为 Just 0 x 或 1 x 或 0 xx 或 1 xx 且 xx gt 10 doubl
  • 从 KeyMembers 中获取身份字段

    我想得到KeyMembers我在 Edmx 中设置的位置StoreGeneratedPattern to Identity有没有办法做到这一点 我可以使用以下代码获取 KeyMembers private static IEnumerabl
  • Flink 中的水印和触发器有什么区别?

    我读到 排序运算符必须缓冲它接收到的所有元素 然后 当它接收到水印时 它可以对时间戳低于水印的所有元素进行排序 并按排序顺序发出它们 这是正确 因为水印表明不能有更多元素到达并与已排序元素混合 https cwiki apache org
  • 在 Ansible 中使用 BuildKit 进行 docker 构建

    我正在使用这个 Ansible 模块community docker docker image构建 docker 镜像 我想用 secret标志 因此我需要启用 BuildKit 我确实编辑了 etc docker daemon json文
  • 使用 Python 从 Javascript 中提取文本

    我一直在查看如何执行此操作的示例 但不太明白 我正在使用 beautifulsoup 来抓取一些数据 我可以使用它来查找我想要的数据 但它包含在以下代码块中 我正在尝试从中提取时间戳信息 我有一种感觉正则表达式在这里工作 但我似乎无法弄清楚
  • 添加 ec2 实例时使用现有的 vpc 和安全组

    有很多示例代码 但是快速改进的 cdk 包并不能帮助我找到一些 我认为 简单事物的工作示例 例如 即使我在示例中发现的导入也会失败 import VpcNetworkRef from aws cdk aws ec2 error TS2724
  • 在运行时将 char[x] 大小调整为 char[y]

    好吧 我希望我能正确解释这一点 我有一个结构 typedef struct MyData char Data 256 int Index MyData 现在 我遇到了一个问题 大多数时候MyData Data256 就可以了 但在某些情况下