【问题标题】:converting boost::filesystem::path into char?将 boost::filesystem::path 转换为字符?
【发布时间】:2019-01-31 07:23:47
【问题描述】:

我已经研究出如何将 boost 路径传递为所需的格式,但我遇到了一些问题,无法将 path.stem 传递到 char 数组中,然后对文件名进行一些检查并采取正确的措施

需要读取文件名并检查然后操作中的下一个可用数字,我打算使用 for 循环将数字放入 char 数组,然后与这个单独的计数器进行比较

如何将 path() 逐个字符输入到数组中 - 或者有更好的方法!

int count(boost::filesystem::path input) {

cout << "inputzz :  " << input << endl;


char data;
wstring winput;
for (int a = 0; a < 4;){

//boost::filesystem::absolute(input).string();

//cout << input.generic_string() << endl;



(input.generic_string()) >> data;


data << (boost::filesystem::path()input.generic_string());


//a++
};

【问题讨论】:

    标签: c++ arrays input boost char


    【解决方案1】:

    GCC:

    给定一个bfs::path p,p.c_str() 让您可以访问以空值结尾的char* 数组。

    const char* c = p.c_str();
    

    完整示例:

    #include<iostream>
    #include<boost/filesystem/path.hpp>
    
    int main(){
        boost::filesystem::path p("~/.bashrc");
        const char* c = p.c_str();
        std::cout << c << '\n';
    
        char c2[99];
        std::strcpy(c2, p.c_str());
        std::cout << c2 << '\n';
    }
    

    MSVC:

    char 不是所有系统的底层表示。例如,在Windows 上,它是wchar_t。出于这个原因,可能需要使用路径的值类型,如const boost::filesystem::path::value_type* c = p.c_str(); 并修改其余代码,例如使用通用std::copy。

    另外,将wchar_t * 转换为char * 的示例代码可以在here 中找到。

    【讨论】:

    • 那对我不起作用 const char* c = input.generic_string().c_str(); cout
    • @KnotwoodV,“不起作用”不能很好地描述您的问题。 (此外,如果您不希望将其关闭,则应改进该问题)。我不知道输入是如何生成的,但一切都按预期工作(请参阅我的答案中的新代码)。
    • 它只是不提供输出,所以我假设它没有传递任何信息,@alfC 如果我知道我应该描述什么,我首先不会提出问题! !
    • const char* c1 = p.string().c_str(); -- p.string()返回的临时std::string实例不会在此语句之后超出范围,因此c_str返回的指针无效?
    • @DanMašek,是的,总的来说你是对的,但出于某种原因它可以工作。实际上有一个更好的函数,我展示的直接返回指针。我更新了我的答案。
    猜你喜欢
    • 2016-06-02
    • 2018-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-29
    • 1970-01-01
    • 2012-07-06
    • 1970-01-01
    相关资源
    最近更新 更多