产生分割故障的C++ CHAR*〔255〕

产生分割故障的C++ CHAR*〔255〕,c++,qt,ubuntu,segmentation-fault,C++,Qt,Ubuntu,Segmentation Fault,我知道这可能是已经讨论了1000次的基本问题,但我想我需要帮助理解为什么以下内容会产生分段错误: char* outputPath = new char[255]; sprintf(outputPath, "/home/istrab/iStrabGUI Output/%s/%s/0/Frames",patientName, techName); 我想知道的原因是,经过一些研究,我已经声明数组的大小为255,我知道它足够大,可以容纳我想写入的字符串。在尝试写入之前,我还确保它已初始化。我还加倍确

我知道这可能是已经讨论了1000次的基本问题,但我想我需要帮助理解为什么以下内容会产生分段错误:

char* outputPath = new char[255];
sprintf(outputPath, "/home/istrab/iStrabGUI Output/%s/%s/0/Frames",patientName, techName);
我想知道的原因是,经过一些研究,我已经声明数组的大小为255,我知道它足够大,可以容纳我想写入的字符串。在尝试写入之前,我还确保它已初始化。我还加倍确保所有涉及的变量都在代码的前面进行了初始化,否则程序将在那时退出。我还有别的办法吗?是字符串本身还是我初始化数组的方式


这段代码是用C++中的Qt 4.8.6编写的。

变量patientName、techName是问题所在,您应该使用resize outputPath使其变大,并且不会溢出

但我试图找出如何使用字符串库中的字符串变量。

如果仍在使用Qt,请使用QString:

QString outputPath;
outputPath.sprintf( "/home/istrab/iStrabGUI Output/%s/%s/0/Frames",
                    patientName, 
                    techName);

在其上运行gdb并在该行上加一个分隔符,然后打印patientName和techName的值。其中一个可能为空。

您可以使用QDir方法


为什么不使用字符串对象而不是字符数组?将节省大量的头。CUR OutPutsPo[ 255 ]将更习惯IMO.,也有常数/定义的最大路径长度,你应该使用的便携性,如果没有其他东西,这应该是C++,对不对?std::ostringstream strm;strm我想知道的原因是,经过一些研究,我宣布数组的大小为255,-不要用这种思维方式编写程序,尤其不要编写无法确保这些先决条件成立的程序。请提供一个示例。另外,您不应该使用sprintf,尽管您应该只使用std::string,但是您可能有自己的局限性。我知道它们不是,因为我使用了print命令在到达有问题的行之前打印它们。谢谢。我试过这个方法,问题就解决了。
QDir path("/home/istrab/iStrabGUI Output/");
path.cd(patientName);
path.cd(techName);
path.cd("/0/Frames");

QString pathString = path.path();