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