3

为什么这段代码不起作用?它在没有编译器错误或警告的情况下引发运行时错误。

 int main(void) {

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

    delete[] korisnik;


    return 0;
}
4

2 回答 2

16
korisnik = "Bizuterija";

此行将存储korisnik和分配的地址替换为new您无法修改的可执行文件数据段中的地址,因为它是字符串文字。您实际上在这里创建了内存泄漏。

尝试将字符串的内容复制到指向的内存中:

strncpy(korisnik, "Bizuterija", 20);

顺便说一句,由于您使用 C++,因此您绝对应该使用std::string.

于 2013-10-10T14:29:31.727 回答
6

我建议切换到 std::string 因为您使用的是 c++。

#include <string>
#include <iostream>
int main(int argc, char** argv) {
    std::string korisnik = "Bizuterija";
    korisnik[1] = 'h';
    std::cout <<korisnik <<std::endl;
    return 0;
}
于 2013-10-10T14:33:00.880 回答