我已经尝试了很多来调试我的代码,但它仍然无法正常工作。整个代码只是崩溃,但没有全面的错误我提出代码请尝试调试那个。
代码:
#include <iostream>
#include<conio.h>
#include<string.h>
#include<fstream>
using namespace std;
void write(char fname[],char text[])
{
strcat(fname,".txt");
ofstream w(fname,ios::app);
w<<text;
w<<"\n";
w.flush();
w.close();
cout<<" sippy "<<fname<<" ";
}
int main ()
{
int login=0;
char t[100],id[100]="Its id ",pass[100]="Its password";
login=1;
strcpy(t,id);
strcat(t,"\n");
strcat(t,pass);
cout<<" finally ";
write("database",t);
getch();
strcpy(t,id);
getch();
cout<<t<<" showing t here";
getch();
cout<<" hope this works for now ";
getch();
cout<<"\nEnter the text"<<endl;
write(id,t);
}
上述代码不适用于tdm gcc代码块
编辑1:
好的,现在已经检测到主要问题,这是一个小错误,通常是由于编程风格不好造成的。因为经常建议如果将一个字符串传递给一个函数,那么该特定函数会在传递的字符串的内存中分配一个新字符串。由于传递的字符串是文字,编辑新形成的字符串的代码会尝试编辑只读文字内存,这是一个错误
只读文字是因为如果编译器在某个不同的地方发现使用相同的文字,那么就可以使用相同的内存来刷新文字的内容,因此必须使文字读取并使用c仔细的样式字符串(应该使用std :: string)
感谢所有
答案 0 :(得分:1)
如果您正面临SegFault,我认为这一行可能是问题所在:
write("database",t);
因为在write
函数中,您在strcat
上使用了fname
,但是您传递了一个只读字符串。
另外,我认为最好使用真正的c ++而不是c +:
#include <string>
#include <iostream>
#include <fstream>
void my_write(std::sting & fname, std::string & text) {
std::string file = fname + ".txt";
std::osftream w(file, std::ios::app);
w << text << "\n";
w.flush();
w.close();
}
int main() {
std::string t = "";
std::string id = "Its id";
std::string pass = "Its password";
std::string fname = "database";
int login = 1;
t = id + "\n" + pass;
my_write( fname, t);
}
我没有测试过,但想法就在这里。