【发布时间】:2016-07-20 16:42:44
【问题描述】:
我知道这可能是已经讨论过 1000 次的基本问题,但我认为我需要帮助理解为什么以下会产生分段错误:
char* outputPath = new char[255];
sprintf(outputPath, "/home/istrab/iStrabGUI Output/%s/%s/0/Frames",patientName, techName);
我想知道这是因为经过一些研究后,我已将数组的大小声明为 255,我知道它足以容纳我希望写入的字符串。我还确保它在尝试写入之前已初始化。我还双重确保任何涉及的变量都在代码中较早地初始化,否则程序将在那时退出。我还有其他方法可以解决这个问题吗?它是在字符串本身还是我初始化数组的方式?
此代码是使用 C++ 中的 Qt 4.8.6 编写的
【问题讨论】:
-
为什么不使用字符串对象而不是字符数组呢?可以省去很多麻烦。
-
char outputPath[255]会更符合 IMO 的习惯。还有你应该使用的最大路径长度的常量/定义(如果没有别的,为了便携性) -
这应该是 C++ 吧?
std::ostringstream strm; strm << "/home/istrab/iStrabGUI Output/" << patientName << '/' << techName << "/0/Frames"; std::string outputPath = strm.str();-- 即使 techname 或 patientName 失控并且比预期的大,代码仍然有效。 -
我想知道这是因为经过一些研究我已经声明数组的大小为 255, -- 不要用这种思维方式编写程序,特别是不要写那些你无法确保这些前提条件成立的地方。
标签: c++ qt ubuntu segmentation-fault