【问题标题】:How to use dirent.h correctly如何正确使用dirent.h
【发布时间】:2010-06-12 18:11:01
【问题描述】:

我是 C++ 新手,我正在尝试使用 dirent.h 标头来操作目录条目。以下小应用程序可以编译,但在您提供目录名称后会呕吐。有人可以给我一个提示吗? int quit 在那里提供了一个while循环。我删除了循环以试图隔离我的问题。

谢谢!

#include <iostream>
#include <dirent.h>

using namespace std;

int main()
{

char *dirname = 0;
    DIR *pd = 0;
    struct dirent *pdirent = 0;

    int quit = 1;



    cout<< "Enter a directory path to open (leave blank to quit):\n";
    cin >> dirname;

    if(dirname == NULL)
    {
        quit = 0;

    }
        pd = opendir(dirname);

    if(pd == NULL)
    {
        cout << "ERROR: Please provide a valid directory path.\n";
    }


    return 0;
}

【问题讨论】:

    标签: c++ dirent.h


    【解决方案1】:

    如果你使用 C++,不要使用 char * 或数组,使用 std::string:

    #include <string>
    ....   
    string dirname;
    cout<< "Enter a directory path to open (leave blank to quit):\n";
    getline( cin, dirname );
    if ( dirname == "" ) {
       exit(1);
    }
    ....   
    pd = opendir(dirname.c_str() );
    

    【讨论】:

    • 使用字符串确实解决了我的问题。我的 c 风格实现有什么问题?
    • @Nick 你没有为 dirname 分配任何内存。如果您分配了内存,则测试它是否为空的方法是if( ! strcmp( dirname, "" ) )
    【解决方案2】:

    变化:

    char *dirname = 0;
    

    到:

    char dirname[PATH_MAX] = "";
    

    【讨论】:

      猜你喜欢
      • 2018-03-15
      • 1970-01-01
      • 1970-01-01
      • 2014-03-14
      • 1970-01-01
      • 2020-12-04
      • 2012-07-12
      • 2013-01-21
      • 2021-10-24
      相关资源
      最近更新 更多