首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么不能像这样复制字符数组“charArray=”;

为什么不能像这样复制字符数组“charArray=”;
EN

Stack Overflow用户
提问于 2014-07-12 18:48:03
回答 5查看 132关注 0票数 0

为什么我们需要使用strcpy()将字符串复制到字符数组中?

我在this.It上浪费了2个小时,没有显示任何错误,但输出结果并不像我预期的那样,我费了2个小时才找出错误。

它只是显示了一个垃圾字符。

当我使用strcpy()时,它工作得很好。

EN

回答 5

Stack Overflow用户

发布于 2014-07-12 20:18:52

对答案的另一种解释是,字符数组是基本类型,而不是operator =被覆盖的类。

正如@StianV.Svendenborg所提到的,将一个字符数组分配给另一个字符数组意味着将其地址分配给另一个字符指针变量。

字符数组分配,如;

代码语言:javascript
复制
char test[4]={1,2,3,4};

将导致分配4个字节(每个字节对应一个字符值)。

在诸如算术将导致test的行为类似于pointer.For示例的表达式中,test+1将指向第二个元素的地址,*(test+1) == 2将为true,并且print("%p",test)将打印数组中第一个元素的地址。

如果您使用类std::stringoperator=,函数将遍历所有这些已分配的字段并复制它们,而无需您的考虑。

票数 2
EN

Stack Overflow用户

发布于 2014-07-12 19:25:16

长长的答案:

一旦在C++中声明了任何数组,无论该数组是int, char or MyClass数组,使用该数组的名称本质上都与使用指向数组中第一个元素的指针相同。一旦数组被动态分配,这一点就变得非常明显,但对于静态分配的数组也是如此。

这意味着下面的代码:

代码语言:javascript
复制
char arr[] = "Lorum ipsum";

意思是:

为堆栈上的12个字符分配足够的空间,并让arr充当指向第一个字符的指针,这个指针是常量的(即指向的内容不能改变)。

因此,如果您尝试编写以下代码:

代码语言:javascript
复制
const char * arr2 = "hello";
arr = arr2; // Error

您真正要问的是:将行为类似于无法更改的指针的arr改为指向此常量字符串中的第一个字符。这是不允许的。

也就是说,如果您使用指向常量字符串的指针,则可以使用所描述的语法:

代码语言:javascript
复制
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.
票数 1
EN

Stack Overflow用户

发布于 2014-07-12 18:51:56

简短的回答:

这是因为数组是静态分配内存的,您不能重新初始化它们。

数组的大小是固定的。

相反,您可以使用std::string

不过,您可以像这样使用char*指针。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24712154

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档