【问题标题】:C++ DIR * dir need to use to only one working at a timeC++ DIR * dir 一次只需要使用一个工作
【发布时间】:2021-01-20 11:03:40
【问题描述】:

您好,我正在使用 C++ 使用代码块进行编程,我只想使用 opendir 两次,并且只有在两个代码块都工作时才会打开,但只有顶部的代码有效,底部的无效。 请有人帮助我一次只有一个目录在工作: 我想要一个 DIR 工作并给我价值以深入到另一个 Dir 并获取价值。

int main()
{   std::string EmployeeNumbr[1000];
    std::string DocumentName[1000];
    std::string Path = "C:\\EmpFiles\\";
    int f;
    int j;

  DIR *dir;
   struct dirent * file;

【问题讨论】:

  • 您是如何确定底部代码块不“工作”的?预期和实际行为是什么?您是否启用了编译器警告?你的编译器应该告诉你 fj 正在使用未初始化。
  • 您还应该使用更安全的 C++ 数据结构,例如向量和 std::filesystem API。
  • 我一个一个地使用两个 Dir,当只将最上面的一个放在一起时,它们是分开工作的。请注意,有两个 Dir,并且都从 windows 复制目录。
  • 所有这些都已经打包到std::filesystem 中,为iterate over directory entries 提供标准化的方式,甚至可以做到recursively。如果您确实想使用opendirreaddirclosedir,请将它们打包成一个类以便于使用:example

标签: c++ directory


【解决方案1】:

您正在使用未初始化的 fj。对于f,这可能是偶然的,因为堆栈仍然相对较新。

但是,当您开始使用 j 时,堆栈已被彻底污染,您未初始化的使用返回随机堆栈垃圾。

如果你这样做,任何半体面的编译器都会对你大喊大叫,所以请弄清楚如何升级警告级别(GCC/Clang 上的 -Wall -Wextra -pedantic 或 MSVC 上的 -W4

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-05
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    相关资源
    最近更新 更多