2017-02-13 149 views

回答

1

該代碼有兩個問題。導致編譯問題的主要問題是將c_str()結果(即const)賦值給變量C,即而不是const。編譯器標記爲錯誤,否則你可以這樣做:

C=R.c_str(); 
C[2] = 'c'; 

這將寫入到內存中的只讀區域,導致未定義的行爲。

您可以通過兩種方式解決這個問題:

  • 聲明C一個const,即const char *C = ...,或
  • 複製內容到太空中,你已經分配。

第一種方法很簡單 - 你這樣做:

const char *C = R.c_str(); 

第二種方法是這樣的:

char *C = new char[R.size()+1]; 
std::strcpy(C, R.c_str()); 

第二個問題是內存泄漏:你的代碼分配C一結果爲new,但從不刪除它。如果你使用strcpy方法,你需要添加

delete[] C; 

在程序結束時,一旦你使用可變C完成。

+0

爲什麼不簡單地施放? 例如char * c =(char *)myStdStr.c_str(); – hfrmobile

+0

@hfrmobile如果添加'const',這對OP的例子來說可以很好地工作。但是,它通常不起作用,因爲您無法控制'c_str()'返回的內容:一旦修改了字符串,或者字符串超出了範圍,您從'c_str ()'變得無效。這就是爲什麼製作副本提供更安全的選擇。 – dasblinkenlight

相關問題