C++ 是什么导致了这种分割错误?
我知道,这样做是个错误的决定C++ 是什么导致了这种分割错误?,c++,segmentation-fault,C++,Segmentation Fault,我知道,这样做是个错误的决定 string replace_strings (FILE *in, FILE *out, char *what, char *repl) { int x = strlen(what); int z = strlen(repl); string newWhat(what, x); string newRepl(repl, z); char c; char *str; //наш буффер int i
string replace_strings (FILE *in, FILE *out, char *what, char *repl)
{
int x = strlen(what);
int z = strlen(repl);
string newWhat(what, x);
string newRepl(repl, z);
char c;
char *str; //наш буффер
int i = 0;
size_t found;
while(!feof(in))
{
而((c!='\0')&&(i您必须为str
分配内存。请使用并忘记笨拙的缓冲区。调试器告诉您错误的来源是什么?此外,您在尝试读取某些内容后始终需要检查输入是否成功。您不初始化c
,也不初始化str
,因此任何事情都可能发生如果没有将C++ I/O与C++的特征混合,则生命将变得更加容易。例如,<>代码> STD::fStruts与 STD::String > > <代码> fPrtuf。而且,不需要使用<代码> StrLon < /C>。注释中的ror-应为“ббфб”-带有一个“ф”。在读取数据时,您要使用std::istringstream
,而不是std::stringstream
。此外,在从文件或键盘读取数据时,请将std::getline
与std::string
一起使用。不要将std::string
与char*
混合使用。请坚持其中一种。
while(!feof(in))
{
while((c!='\0') && (i<=255))
{
str[i] = fscanf(in, "%c", c);
i++;
}
string newStr (str, i);
while(found != string::npos)
{
found = newStr.find(newWhat);
newStr.replace(found, newWhat.length(), newRepl);
}
fprintf(out, "%s", newStr.c_str());