字符串文字操作 - 复制字符

ubb*_*bdd -1 c++ string copy character

我试图在以下代码中实现一个简单的字符串副本.

但是,我在"*d =*c;"行中遇到了运行时错误.

谁能告诉我这有什么问题?

void test3()
{
    char *a="123456";
    char *b="000000";

    char *c=a;
    char *d=b;

    while(*c){
        *d = *c;
        cout << *c << endl;
        c++;
        d++;
    }

    *d='\0';
}
Run Code Online (Sandbox Code Playgroud)

Die*_*lla 6

您无法更改const数据.您提供的这些字符串(文字字符串)存储在程序的只读区域中.实际上,您在程序中提供的任何字符串文字都"000000"被认为是const char*(指向常量字符的指针),因此不允许(至少不建议)修改它们.


And*_*ron 5

基本上,字符串litterals是不变的,不能更改.在以下行中:

char *a="123456";
Run Code Online (Sandbox Code Playgroud)

char *a应该替换为const char * a因为a指向一块常量内存.在函数的下方,您尝试更改常量内存块,这会产生运行时错误.

要获得可以在此类函数中使用的真实字符数组,您应该使用:

char a[] = "123456";
Run Code Online (Sandbox Code Playgroud)

这将生成一个可以自由操作的可变(非常量)数组.