C++17 文件系统调用产生段错误

标签 c++ c++17

基于对 Size of file using C++17 的回复,我写了下面的程序。但是,当可执行文件运行时,出现段错误。我在运行 High Sierra 的 iMac 上使用 g++ 8.3.0。

// c17filesize.cpp
// Jul-02-2019

#include <cstring>
#include <filesystem>
using namespace std;

int main(int argc, char **argv)
{
    char filename[100];
    (argc > 1) ? strcpy(filename, argv[1]) : strcpy(filename, __FILE__);
    auto size = filesystem::file_size(filename);
}

最佳答案

  1. 比 C 风格的字符串更喜欢使用字符串(及其构造器)。
  2. 根据https://en.cppreference.com/w/cpp/filesystem/file_size您必须指定完整路径。您是否验证 argv[1] 包含完整路径?
  3. 在尝试读取其大小之前检查文件是否存在 std::filesystem::exists(filename);

  4. 使用 try 和 catch 部分来捕获异常。

关于C++17 文件系统调用产生段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56845734/

相关文章:

c++ - 如何检测c++中是否附加了调试器?

c++ - 具有不同对齐要求的不同类型的两个对象可以具有相同的对象表示吗?

c++ - 比较来自外部 API 的相同类型的两个结构

c++ - 从可变参数模板中的一组仿函数中调用带有参数的函数

c++ - 为什么接受默认的 noexcept 移动构造函数?

c++ - const 引用绑定(bind)到右值

c++ - 将 all_of 与 lambda 函数集合一起使用?

c++ - 如何通过源代码中的执行策略检测C++ 17扩展内存管理算法的可用性?

c++ - DLL 导出导致唯一指针问题

c++ - 带有 #include<iostream.h> 的程序允许使用 strlen() 等字符串函数。为什么?