У меня есть код для вывода в файл из 2D-вектора Kvec. Имя файла вводится в строку s, и я использую sprintf для преобразования int в char, который должен быть введен в строку. Затем я использовал s.c_str(), чтобы ввести его в качестве имени файла, который я хочу открыть. Поэтому, когда я пытаюсь запустить код, я получаю segfault, когда пытаюсь открыть файл с помощью foo.open(). У меня есть такая небольшая область ошибок, что я сбиваюсь с толку, где может быть ошибка.Ошибка сегментации при открытии файла в C++
Я уже использовал эту технику для работы над строками для открытия файлов, поэтому знаю, что sprintf и s.push_back() работают. Где я иду не так?
fstream foo;
string s;
char g[10],j[10];
int b=0;
sprintf(j,"L_%dLprime_%dM_%dMprime_%d",L,Lprime,M,Mprime);
for(int i=0;i<(int)strlen(j);i++)
s.push_back(j[i]);
for(int D = 0; D < 1000; D++)
{
s+="MSF-Dval";
sprintf(g,"%d",D);
for(int i=0; i<(int)strlen(g); i++)
s.push_back(g[i]);
s+=".dat";
foo.open(s.c_str(), ios::in | ios::out | ios::binary);
cout<<"Is this working?"<<endl;
b = 0;
for(L1=abs(L-D);L1<L1max;L1++)
{
if((D>abs(L+L1) || D<abs(L-L1)) && b == 0)
{
if(remove(s.c_str())!=0)
cout<<"error deleting file";
break;
}
b = 1;
if(foo.is_open())
{
foo << L1 << " "<<Kvec.at(L1).at(L1+D-abs(L-L1)).re<<" "<<Kvec.at(L1).at(L1+D-abs(L-L1)).im<<endl;
}
else
cout<<"not open";
}
foo.close();
s.erase(8,4 + (int)strlen(g));
}
* Ошибка сегментации при смешивании C и C++ – LogicStuff
Ваша первая строка 'sprintf' забивает черту более 10 символов в массиве' j' –