2013-10-10 21 views
3

爲什麼這段代碼不起作用?它會拋出運行時錯誤而無編譯器錯誤或警告。在C++中使用char的新操作符

int main(void) { 

    char *korisnik = new char[20]; 
    korisnik = "Bizuterija"; 
    *(korisnik+1) = 'h'; // error here! 
    cout << korisnik << endl; 

    delete[] korisnik; 


    return 0; 
} 
+4

這就是爲什麼您使用的std :: string在C++ – Simon

+0

在C++中,你不應該指定字符串文字的地址爲char *,而是爲const char *。它只允許與C向後兼容。 –

回答

16
korisnik = "Bizuterija"; 

此行改寫存儲在korisniknew與你不能修改可執行文件的數據段的地址分配的地址,因爲它是一個字符串文字。你實際上在這裏創建一個內存泄漏。

試圖通過字符串的內容複製到指定內存而不是:

strncpy(korisnik, "Bizuterija", 20); 

順便說一句,因爲你用C++的工作,你一定要使用std::string

+1

我在發佈評論時編輯了答案。我剛剛意識到它後來被標記爲C++(即使'cout'是一個提示) – Jack

6

因爲您使用的是C++,所以我建議切換到std :: string。

#include <string> 
#include <iostream> 
int main(int argc, char** argv) { 
    std::string korisnik = "Bizuterija"; 
    korisnik[1] = 'h'; 
    std::cout <<korisnik <<std::endl; 
    return 0; 
}