为什么我们需要使用strcpy()将字符串复制到字符数组中?
我在this.It上浪费了2个小时,没有显示任何错误,但输出结果并不像我预期的那样,我费了2个小时才找出错误。
它只是显示了一个垃圾字符。
当我使用strcpy()时,它工作得很好。
发布于 2014-07-12 20:18:52
对答案的另一种解释是,字符数组是基本类型,而不是operator =被覆盖的类。
正如@StianV.Svendenborg所提到的,将一个字符数组分配给另一个字符数组意味着将其地址分配给另一个字符指针变量。
字符数组分配,如;
char test[4]={1,2,3,4};将导致分配4个字节(每个字节对应一个字符值)。
在诸如算术将导致test的行为类似于pointer.For示例的表达式中,test+1将指向第二个元素的地址,*(test+1) == 2将为true,并且print("%p",test)将打印数组中第一个元素的地址。
如果您使用类std::string和operator=,函数将遍历所有这些已分配的字段并复制它们,而无需您的考虑。
发布于 2014-07-12 19:25:16
长长的答案:
一旦在C++中声明了任何数组,无论该数组是int, char or MyClass数组,使用该数组的名称本质上都与使用指向数组中第一个元素的指针相同。一旦数组被动态分配,这一点就变得非常明显,但对于静态分配的数组也是如此。
这意味着下面的代码:
char arr[] = "Lorum ipsum";意思是:
为堆栈上的12个字符分配足够的空间,并让arr充当指向第一个字符的指针,这个指针是常量的(即指向的内容不能改变)。
因此,如果您尝试编写以下代码:
const char * arr2 = "hello";
arr = arr2; // Error您真正要问的是:将行为类似于无法更改的指针的arr改为指向此常量字符串中的第一个字符。这是不允许的。
也就是说,如果您使用指向常量字符串的指针,则可以使用所描述的语法:
const char * cstr1 = "Hello";
const char * cstr2 = "Bye";
cstr1 = cstr2; // All is good, you are only changing which
// c-string in the global data you are pointing to.发布于 2014-07-12 18:51:56
简短的回答:
这是因为数组是静态分配内存的,您不能重新初始化它们。
数组的大小是固定的。
相反,您可以使用std::string。
不过,您可以像这样使用char*指针。
https://stackoverflow.com/questions/24712154
复制相似问题