使用 malloc 和 realloc 从输入文件到数组

2023-12-04

我试图从文件中读取输入,并使用 malloc 和 realloc 将每个字符串放入数组中。因此,如果输入文件是:

alex
john
jane
smith

数组的内容包含 {"alex\n", "john\n", "jane\n", "smith\n"}。到目前为止我已经做了这样的事情:

int n=0;
int size=1;
File *fp = fopen(args[0],"r");
int c;
char* inputFile;
inputFile = (char*) malloc(size);
if(fp==0){
  fprintf(stderr, "Cannot open file!\n");
  return -1;}
else{
  do{
    c = fgetc(fp);
    inputFile = (char*) realloc(inputFile, size+1);
    inputFile[n]=c;
    n++;
    size++;
  }while(c!=EOF);

我相信这个算法最终会得到这样的数组 {'a','l','e','x','\n','j','o','h','n',' \n','j','a','n','e','\n','s','m','i','t','h','\n'}

如何使 inputFile 成为二维数组?我应该用 realloc 做什么?


您可以尝试以下方法或只是研究它是如何完成的。它在我的 Linux 机器上运行良好。如果您有任何疑问,请告诉我。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

const int INITIAL_MAX_LINES = 2;
const int MAX_LINES_INC = 2;

const int INITIAL_MAX_LINE_LENGTH = 2;
const int MAX_LINE_LENGTH_INC = 2;

int main (int argc, char *argv[])
{
  int nlines = 0, i;
  FILE *fp = fopen(argv[1], "r");
  char **inputFile, *buffer;
  int max_lines, c, buflen, bufpos, end_of_line;

  if (argc < 2) {
    printf("No enough arguments.\n");
    return -1;
  }

  max_lines = INITIAL_MAX_LINES;

  inputFile = (char **) malloc(max_lines * sizeof(char*));
  if (fp==0) {
    fprintf(stderr, "Cannot open file!\n");
    return -1;
  }
  else{
    /* Start with a buffer. */
    bufpos = 0;
    buflen = INITIAL_MAX_LINE_LENGTH;
    buffer = (char *) malloc(buflen * sizeof(char *));

    c = 0;
    while (c != EOF) {

      end_of_line = 0;

      c = fgetc(fp);

      if (c == EOF || c == '\n' || c == '\r') {
        end_of_line = 1;
       /* Discard this character. */
      }
      else {
        /* Put this character in the buffer. */
        /* But check if we have enough memory first! */
        /* Leave room for the null character at the end. */
        if (bufpos >= buflen - 1) {
          buflen += MAX_LINE_LENGTH_INC;
          buffer = (char *) realloc(buffer, buflen * sizeof(char));
        }
        buffer[bufpos] = c;
        bufpos++;
      }

      if (end_of_line) {
        /* Remember this line and get a new buffer. */
        /* Check if we need more memory. */
        if (nlines >= max_lines) {
          max_lines += MAX_LINES_INC;
          inputFile = (char **) realloc(inputFile, max_lines * sizeof(char*));
        }

        /* Null terminate the buffer.*/
        buffer[bufpos++] = 0;

        inputFile[nlines] = buffer;
        nlines++;

        bufpos = 0;
        buflen = INITIAL_MAX_LINE_LENGTH;
        buffer = (char *) malloc(buflen * sizeof(char *));
      }
    }
  }

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

使用 malloc 和 realloc 从输入文件到数组 的相关文章

  • 向进度条添加百分比文本 C#

    我有一个方法可以显示进程栏何时正在执行以及何时成功完成 我工作得很好 但我想添加一个百分比 如果完成 则显示 100 如果卡在某个地方 则显示更少 我在网上做了一些研究 但我无法适应我正在寻找的解决方案 这是我的代码 private voi
  • 每个托管线程是否都有自己对应的本机线程?

    我想知道是否在 Net 中创建托管线程 通过调用Thread Start 导致在后台创建一个本机线程 那么托管线程是否有对应的本机线程呢 如果是 当托管线程等待或睡眠时 是否意味着相应的本机线程也在等待或睡眠 是的 NET 线程映射到所有当
  • 未提供参数时如何指定 C# System.Commandline 行为?

    在我的控制台应用程序中 当未提供控制台参数时 将执行我指定列表 在本例中为参数 3 的任何处理程序 调用该处理程序时 布尔参数设置为 false 但对我来说 根本不调用它更有意义 如何防止这种情况发生并显示帮助文本 using System
  • 为什么 int8_t 和用户通过 cin 输入显示奇怪的结果[重复]

    这个问题在这里已经有答案了 一小段代码让我发疯 但希望你能阻止我跳出窗外 看这里 include
  • 计算 Richtextbox 中所有单词的最有效方法是什么?

    我正在编写一个文本编辑器 需要提供实时字数统计 现在我正在使用这个扩展方法 public static int WordCount this string s s s TrimEnd if String IsNullOrEmpty s re
  • 提交后禁用按钮

    当用户提交付款表单并且发布表单的代码导致 Firefox 中出现重复发布时 我试图禁用按钮 去掉代码就不会出现这个问题 在firefox以外的任何浏览器中也不会出现这个问题 知道如何防止双重帖子吗 System Text StringBui
  • MVC 在布局代码之前执行视图代码并破坏我的脚本顺序

    我正在尝试将所有 javascript 包含内容移至页面底部 我正在将 MVC 与 Razor 一起使用 我编写了一个辅助方法来注册脚本 它按注册顺序保留脚本 并排除重复的内容 Html RegisterScript scripts som
  • ClickOnce 应用程序错误:部署和应用程序没有匹配的安全区域

    我在 IE 中使用 FireFox 和 Chrome 的 ClickOnce 应用程序时遇到问题 它工作正常 异常的详细信息是 PLATFORM VERSION INFO Windows 6 1 7600 0 Win32NT Common
  • 错误:表达式不产生值

    我尝试将以下 C 代码转换为 VB NET 但在编译代码时出现 表达式不产生值 错误 C Code return Fluently Configure Mappings m gt m FluentMappings AddFromAssemb
  • 使用 Newtonsoft 和 C# 反序列化嵌套 JSON

    我正在尝试解析来自 Rest API 的 Json 响应 我可以获得很好的响应并创建了一些类模型 我正在使用 Newtonsoft 的 Json Net 我的响应中不断收到空值 并且不确定我的模型设置是否正确或缺少某些内容 例如 我想要获取
  • 如何使用 LINQ2SQL 连接两个不同上下文的表?

    我的应用程序中有 2 个数据上下文 不同的数据库 并且需要能够通过上下文 B 中的表的右连接来查询上下文 A 中的表 我该如何在 LINQ2SQL 中执行此操作 Why 我们正在使用 SaaS 产品来跟踪我们的时间 项目等 并希望向该产品发
  • 在 C 中初始化变量

    我知道有时如果你不初始化int 如果打印整数 您将得到一个随机数 但将所有内容初始化为零似乎有点愚蠢 我问这个问题是因为我正在评论我的 C 项目 而且我对缩进非常直接 并且它可以完全编译 90 90 谢谢 Stackoverflow 但我想
  • qdbusxml2cpp 未知类型

    在使用 qdbusxml2cpp 程序将以下 xml 转换为 Qt 类时 我收到此错误 qdbusxml2cpp c ObjectManager a ObjectManager ObjectManager cpp xml object ma
  • 使用自定义堆的类似 malloc 的函数

    如果我希望使用自定义预分配堆构造类似 malloc 的功能 那么 C 中最好的方法是什么 我的具体问题是 我有一个可映射 类似内存 的设备 已将其放入我的地址空间中 但我需要获得一种更灵活的方式来使用该内存来存储将随着时间的推移分配和释放的
  • AES 128 CBC 蒙特卡罗测试

    我正在 AES 128 CBC 上执行 MCT 如中所述http csrc nist gov groups STM cavp documents aes AESAVS pdf http csrc nist gov groups STM ca
  • 使用 C# 读取 Soap 消息

  • 方法优化 - C#

    我开发了一种方法 允许我通过参数传入表 字符串 列数组 字符串 和值数组 对象 然后使用这些参数创建参数化查询 虽然它工作得很好 但代码的长度以及多个 for 循环散发出一种代码味道 特别是我觉得我用来在列和值之间插入逗号的方法可以用不同的
  • C++ 条件编译

    我有以下代码片段 ifdef DO LOG define log p record p else define log p endif void record char data 现在如果我打电话log hello world 在我的代码中
  • 如何从 ODBC 连接获取可用表的列表?

    在 Excel 中 我可以转到 数据 gt 导入外部数据 gt 导入数据 然后选择要使用的数据源 然后在提供登录信息后 它会给我一个表格列表 我想知道如何使用 C 以编程方式获取该列表 您正在查询什么类型的数据源 SQL 服务器 使用权 看
  • 从列表中选择项目以求和

    我有一个包含数值的项目列表 我需要使用这些项目求和 我需要你的帮助来构建这样的算法 下面是一个用 C 编写的示例 描述了我的问题 int sum 21 List

随机推荐

  • androidcursor.getBlob 不工作

    您好 我尝试在 sqlite 数据库中存储和检索图像 我的以下代码不起作用 我不确定我做错了什么 请帮忙 我创建的数据库表如下 db openOrCreateDatabase StudentDB Context MODE PRIVATE n
  • 在 Mongo/RectiveMongo 中存储/获取列表引用的值的最佳方式?

    我有一个非常常见的用例 评论列表 每个评论都有一个作者 我使用引用存储评论中对作者的引用 因为作者可以发表多个评论 现在我正在使用 ReactiveMongo 并希望尝试保持数据库访问异步 但在这种情况下 我不知道如何做 我对数据库进行异步
  • Android 序列化/对象传递和返回

    所以我有一个管理工单的应用程序 在应用程序的一部分中 我有一个从网络服务检索到的工作订单列表 然后 用户从列表中选择一个工作订单 列表将启动一个显示工作订单详细信息的新活动 将工作订单对象传递给它 用户可以在此期间编辑工作订单的部分内容 如
  • 使用已删除的函数‘sf::RenderWindow& sf::RenderWindow::operator=(const sf::RenderWindow&)’

    我对 C 还很陌生 所以请放轻松 我正在尝试使用 sfml 创建一个 RenderWindow 然后 在创建播放器时 该播放器的关联 窗口 对象将设置为之前创建的 RenderWindow 我的目的是能够从播放器对象运行窗口方法 例如 wi
  • 如何直接初始化一个HashMap(以字面的方式)?

    有没有像这样初始化 Java HashMap 的方法 Map
  • 无法安装APK

    我正在使用 Eclipse GanymedeADT 10 0插件和Android3 0 SDK构建我的应用程序 当我尝试在手机上部署应用程序时 我在控制台上看到以下内容 2011 05 06 10 35 38 MyProject Faile
  • jquery is(":visible") 和 is(":animated") 动画期间的错误?

    事情是这样的 我有多个图标 每个图标在 div 中显示一条消息 当我将鼠标悬停在图标上时 该框会显示 当我将鼠标移出时 它会关闭 当我单击时 我希望该框不会自动关闭 但仅在我单击该框角落的 X 后才关闭 这一切都很顺利 直到我添加了动画 问
  • CSS:如何强制背景图像拉伸/压缩以适合div,而不保持纵横比

    我遇到了一个令人沮丧的问题 希望得到一些帮助 我编写了一个脚本 允许我调整屏幕上为客户构建的应用程序的 div 大小 但我遇到了一个以前从未遇到过的幽默问题 我知道有很多方法可以确保图像Does保持其纵横比 但我不知道如何强制不这样做 例如
  • 获取SWF版本信息

    在 FlashBuilder 的编译器选项 属性 gt Flex 编译器 中 在 Adobe Flash Player 选项 下有一个 使用特定版本 的选项 您可以在其中告诉它要链接到哪个 Flash Player 如何在运行时获取这个值
  • ImageMagick 将大图像裁剪为 xyz 块

    我有一个大的 jpg 其分辨率为 x 256 x 256 我想将此图像剪切成 256x256 的图块 命名约定为 zoom x y jpg 过去我使用 ZoomifyExpress Converter 来进行剪切和缩放 我还想要 6 种不同
  • 确定两个 IP 地址是否在同一子网中 - IP 地址中的前导 0 或尾随 0 是否被删除?

    我知道如果两个 IP 地址与子网掩码进行 AND 运算 如果结果相同 那么它们位于同一网络上 如果结果不同 则它们位于不同的网络上 我的问题是 当给定的 IP 地址省略一些 0 时 多余的 0 放在哪里 例如 如果子网掩码是 255 128
  • 在 Mvc.Controller 中使用服务器

    我有自己的遗传App Controller from Mvc Controller然后我的所有控制器都继承自它 我利用接口编写了一个提供程序并将其实现为MyService并且构造函数采用Server的财产Mvc Controller这是属于
  • 按索引对 numpy.array 行进行排序

    我有 2Dnumpy array和一个索引元组 a array 0 0 0 1 1 0 1 1 ix 2 0 3 1 如何按索引对数组的行进行排序 预期结果 array 1 0 0 0 1 1 0 1 我尝试使用numpy take 但它只
  • 不断收到 org.hibernate.exception.JDBCConnectionException: 无法执行查询

    我有一个 J2EE 应用程序 它使用 JSP 页面作为前端 使用 Struts2 作为控制器 我还使用 Hibernate 将对象映射到 MySql DB 当我在服务器上部署应用程序时 它工作正常 但在不可预测的一段时间 例如一两天 之后
  • 在多个 settimeout 上使用 Async/Await

    为了理解 async await 我尝试在 settimeout 运行并到期后显示一条控制台消息 如何修复下面的代码 我有 5 个 settimeout 函数 每个函数完成后都应显示各自的消息 function t1 setTimeout
  • 以编程方式查找 sql server 的所有实例

    我知道有很多与此类似的主题 但没有一个提供我正在寻找的正确答案 我正在努力收集我们网络上的所有 SQL Server 实例 它应该能够检测正在运行的 SQl Server 版本 我们运行的不同版本之间存在差异 SQL Server 2000
  • BotFramework 和 LUIS 出现 JSON 序列化器错误

    StackOverflow 社区 我有一个聊天机器人 并集成了 LUIS ai 以使其更加智能 其中一个对话即将与主管 老师 预约 一切都运行良好 代码完全相同 几个小时前 我遇到了一些奇怪的错误 Exception Type Newton
  • 如何从 shell 脚本中变量中存储的日期中减去年份?

    as of dt 2016 01 01 as of dt prev year as of dt d 1 year Y m d echo as of dt prev year 这是行不通的 错误 d 找不到命令 但是 如果我们使用 date
  • 如何在MFC编程中使用GetDHtmlDocument()?

    我正在尝试使用 H结果 获取DHtml文档 IHTMLDocument2 pphtml文档 MFC编程中的函数 基本上 我试图在给定不同配置 加载输入 的 HTML 视图对话框应用程序 C w MFC 中呈现 GUI 所以我将以下代码放入
  • 使用 malloc 和 realloc 从输入文件到数组

    我试图从文件中读取输入 并使用 malloc 和 realloc 将每个字符串放入数组中 因此 如果输入文件是 alex john jane smith 数组的内容包含 alex n john n jane n smith n 到目前为止我