为什么这个c++赋值语句是非法的
Why this C++ assignment statement is illegal?
我的代码如下:
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风格的字符数组,那么您需要分配一个足够大的数组并将字符复制到其中(可能使用memcpy
或str(n)cpy
)。我就不举例子了,因为我不想鼓励这种事情。
对于这两个代码,您分配*test2= *test;
,它导致第一个代码崩溃;第二个代码,只有第一个'a'被分配给test2
。如果你想分配整个"aaa",你应该做test2= test;
,因为*test
只指向第一个值'a'。
相关文章:
- 变量在使用赋值语句赋值后恢复为以前的值
- 对于单个数据 WORD 的 memcpy 和赋值语句有什么区别?
- 如何使C++编译器遵循与C#在该赋值语句中相同的优先级、关联性和求值顺序
- 复制构造函数和复制赋值运算符是否应具有相同的语句?
- c++ 如何计算赋值运算符(if 语句)
- 静态成员函数赋值而不带返回语句
- 在 If 语句 [C++] 中赋值变量
- 我很难为 if/else 语句编写此赋值的代码.这是第一堂编程课
- 为什么常量字符 INITIAL='G' 不是赋值语句?
- 基本赋值语句
- 在一个语句中对原子布尔变量进行多次赋值
- 什么是成员数据指针的正确赋值语句
- 赋值运算符和条件语句
- 需要左值作为赋值错误的左操作数通过 if 语句
- 如果赋值/语句在C++中意味着什么
- 循环内部的赋值语句
- 为什么这个c++赋值语句是非法的
- 赋值语句截断字符
- C++指针赋值语句似乎不起作用/做任何事情
- 在C语言中,如果if语句包含赋值语句,是否会更快?