首页 > 后端开发 > C++ > 如何在 C 中创建动态大小的数组来处理未知大小的文件?

如何在 C 中创建动态大小的数组来处理未知大小的文件?

Barbara Streisand
发布: 2024-11-14 20:59:02
原创
1039 人浏览过

How Can I Create Dynamically Sized Arrays in C to Handle Files of Unknown Size?

C 语言中的动态大小数组

考虑以下 C 代码:

<br>int大小 = 0;<br>int n = 0;<br>FILE* 图片;<p>图片 = fopen("test.jpg", "r");<br>fseek(图片, 0, SEEK_END);<br>siz = ftell(图片);</p><p>char Sbuf[大小]; // 错误:变长数组<br>fseek(picture, 0, SEEK_SET);<br>while (!feof(picture)) {</p><pre class="brush:php;toolbar:false">n = fread(Sbuf, sizeof(char), siz, picture);
// do stuff with the buffer
// memset(Sbuf, 0, sizeof(Sbuf));
登录后复制

}

;

在这段代码中,目标是将文件的内容读入缓冲区,但缓冲区的大小未知直到文件打开并确定其大小。然而,C 语言不允许声明可变长度数组。

可变长度数组的替代方案

要解决这个问题,有几种替代方案:

  • std::vector:使用 C 标准模板库(STL) 创建动态数组。
    <br>std::vector<char>; sbuf;</char>
    登录后复制

Sbuf.push_back(someChar);

  • 动态分配:使用new运算符进行分配运行时的内存array.
    <br>char* Sbuf = new char[siz];
    登录后复制

delete [] Sbuf; // 完成后释放内存

注意事项

虽然动态分配提供了一种创建可变大小数组的方法,但它附带一些注意事项:

    必须正确管理内存分配以避免内存占用泄漏。
  • 数组的索引不能直接进行算术运算,因为它是一个指针。
  • 不同的编译器可能以不同的方式实现变长数组,从而导致兼容性问题。

结论

虽然长度可变C 不支持数组,但有几种替代方法可用于创建可以适应要存储的数据大小的动态数组。必须根据项目的具体要求和限制来选择最合适的选项。

以上是如何在 C 中创建动态大小的数组来处理未知大小的文件?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板