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

时间:2014-08-18 12:59:32

标签: c++ arrays string

我的代码就像这样:

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 []”方式之间传递字符串时的区别。但我不知道这个错误是如何发生的。 任何人都可以帮助我吗?

2 个答案:

答案 0 :(得分:4)

  

我不知道这个错误是如何发生的

您永远不会初始化test2指向任何内容,因此使用*test2取消引用此无效指针会产生未定义的行为。这可能会导致程序崩溃,或者破坏某些随机内存位置,或者执行其他任何操作。

  

任何人都可以帮助我?

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

char test2 = *test;

如果您想要整个字符串的副本,最好的办法是使用std::string;乱搞指针往往比它的价值更麻烦。

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

如果你真的想出于某种原因想要使用C风格的字符数组,那么你需要分配一个足够大的数组并将字符复制到其中(可能使用memcpy或{{1} })。我不会举一个例子,因为我不想鼓励这种事。

答案 1 :(得分:0)

对于这两个代码,您指定*test2= *test;会导致第一个代码崩溃;和第二个代码,只有第一个' a'正被分配到test2。如果您要分配整个" aaa",则应test2= test;,因为*test仅指向第一个值' a'。