为什么这个c++赋值语句是非法的

Why this C++ assignment statement is illegal?

本文关键字:非法 赋值语句 c++ 为什么      更新时间:2023-10-16

我的代码如下:

void main(){
    char test[]  = "aaa";
    char* test2  ;
    *test2 = * test;
    Permutation(test);
    system("pause");
}

此代码可以正常运行。但是当我把它改成:

void main(){
    char* test  = "aaa";
    char* test2  ;
    *test2 = * test;
}

vs 2012报告一个错误。实际上,我知道在"char *[]"方式和"char a[]"方式之间删除字符串的区别。但我不知道这个错误是怎么发生的。有人能帮我吗?

我不知道这个错误是怎么发生的

你从来没有初始化test2指向任何东西,所以用*test2解引用这个无效的指针会产生未定义的行为。这可能会使程序崩溃,或者破坏一些随机的内存位置,或者造成其他任何事情。

有人能帮我吗?

如果您只想复制第一个字符,则使用字符而不是指针。

char test2 = *test;

如果你想要整个字符串的副本,你最好的选择是使用std::string;摆弄指针通常比它的价值要大得多。

std::string test = "aaa";
std::string test2 = test;

如果出于某种原因您真的想要使用c风格的字符数组,那么您需要分配一个足够大的数组并将字符复制到其中(可能使用memcpystr(n)cpy)。我就不举例子了,因为我不想鼓励这种事情。

对于这两个代码,您分配*test2= *test;,它导致第一个代码崩溃;第二个代码,只有第一个'a'被分配给test2。如果你想分配整个"aaa",你应该做test2= test;,因为*test只指向第一个值'a'。