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());