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

时间:2011-09-14 16:40:46

标签: 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';
}

5 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:5)

基本上,字符串litterals是常量,不能更改。在以下行中:

char *a="123456";

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

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

char a[] = "123456";

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

答案 2 :(得分:2)

您正在尝试修改文字,编译器通常将其放在可执行文件的只读部分中;现代处理器具有硬件锁,可以防止病毒发生这种情况。

您可以通过提供自己的字符数组来修复它,可以使用文字初始化:

char b[] = "000000";

答案 3 :(得分:2)

*d=*c*d='\0'都被破坏了,因为您可能无法更改来自字符串文字的这些值。它们是不可修改的。如果您按照预期使用const,那么您就不会犯这个错误。

答案 4 :(得分:1)

由于您已将指针c和d分配给常量字符串,因此无法更改它们!您需要为d分配一个char数组才能使其正常工作:

char d[MAX_CHAR];