2013-10-27 226 views
2
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)) 
    { 
     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()); 

返回段錯誤,有什麼不對?我該怎麼辦?幫助我們

+1

什麼是調試器告訴你有關錯誤的來源?此外,你**總是**需要檢查輸入是否成功** **之後嘗試讀取的東西。 –

+2

你不初始化'c',並且你不初始化'str',所以會發生任何事情。 –

+0

如果您沒有將C I/O與C++功能混合,生活會更容易。例如,'std :: fstream'與'std :: string'相比'fprintf'更好。 –

回答

2

您必須爲str分配內存。使用stringstream,並忘記笨拙的緩衝區。

+0

讀取數據時,你想使用'std :: istringstream',而不是'std :: stringstream'。 –

+0

此外,當從文件或鍵盤讀取數據時,使用'std :: getline'和'std :: string'。不要混用'std :: string'和'char *'。堅持一個或另一個。 –

相關問題