我知道这可能是基本的,已被讨论了1000次,但我想我需要帮助理解为什么以下会产生分段错误:
char* outputPath = new char[255];
sprintf(outputPath, "/home/istrab/iStrabGUI Output/%s/%s/0/Frames",patientName, techName);
我想知道这是因为经过一些研究后,我已经宣布数组的大小为255,我知道它足够大以容纳我希望写入的字符串。在我尝试写入之前,我还确保它已初始化。我还加倍确定任何涉及的变量在代码中早先初始化,或者程序将在那时退出。还有另外一种方法可以解决这个问题吗?它是在字符串本身还是我初始化数组的方式?
此代码是使用Qt 4.8.6在C ++中编写的
答案 0 :(得分:3)
如果您正在使用Qt,请使用QString
:
QString outputPath;
outputPath.sprintf( "/home/istrab/iStrabGUI Output/%s/%s/0/Frames",
patientName,
techName);
答案 1 :(得分:1)
在其上运行gdb并在该行上放置一个中断,然后打印patientName和techName的值。其中一个可能是空的。
答案 2 :(得分:1)
您可以使用QDir
方法。
QDir path("/home/istrab/iStrabGUI Output/");
path.cd(patientName);
path.cd(techName);
path.cd("/0/Frames");
QString pathString = path.path();
答案 3 :(得分:0)
vars patientName,techName是问题,你应该使用resize outputPath变大,不会溢出。
但我试图找出使用字符串库中的字符串var。 Look here