Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么不能像这样复制字符数组charArray=";“一些字符串”;;_C++_C_String - Fatal编程技术网

C++ 为什么不能像这样复制字符数组charArray=";“一些字符串”;;

C++ 为什么不能像这样复制字符数组charArray=";“一些字符串”;;,c++,c,string,C++,C,String,为什么我们需要使用strcpy()将字符串复制到char数组中 我在这方面浪费了2个小时。它没有显示任何错误,但输出结果并不像我预期的那样,我花了2个小时努力找出错误 它只是显示一个垃圾字符 当我使用strcpy()时,它工作得很好。简短回答: 这是因为数组是静态分配的内存,您无法重新初始化它们。 数组的大小是固定的。 相反,您可以使用std::string 尽管如此,您可以像这样使用char*指针 简短回答: 这是因为数组是静态分配的内存,您无法重新初始化它们。 数组的大小是固定的。 相反,您

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

我在这方面浪费了2个小时。它没有显示任何错误,但输出结果并不像我预期的那样,我花了2个小时努力找出错误

它只是显示一个垃圾字符

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

简短回答:
这是因为数组是静态分配的内存,您无法重新初始化它们。
数组的大小是固定的。
相反,您可以使用
std::string

尽管如此,您可以像这样使用
char*
指针

简短回答:
这是因为数组是静态分配的内存,您无法重新初始化它们。
数组的大小是固定的。
相反,您可以使用
std::string

尽管如此,您可以像这样使用
char*
指针

简短回答:
这是因为数组是静态分配的内存,您无法重新初始化它们。
数组的大小是固定的。
相反,您可以使用
std::string

尽管如此,您可以像这样使用
char*
指针

简短回答:
这是因为数组是静态分配的内存,您无法重新初始化它们。
数组的大小是固定的。
相反,您可以使用
std::string

尽管如此,您可以像这样使用
char*
指针

长答案:

一旦你在C++中声明了任何数组,无论是<代码> int、char还是MyClass < /C>数组,数组中的任何名称的使用与使用数组中第一个元素的指针基本相同。一旦动态分配了阵列,这一点就变得非常明显,但对于静态分配的阵列也是如此

这意味着以下代码:

char arr[] = "Lorum ipsum";
指:

在堆栈上为12个字符分配足够的空间,并让arr作为指向第一个字符的指针,该指针为常量(即,指向的内容不能更改)

因此,如果你试图写:

const char * arr2 = "hello";
arr = arr2; // Error
您真正要问的是:Change
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.
长答覆:

一旦你在C++中声明了任何数组,无论是<代码> int、char还是MyClass < /C>数组,数组中的任何名称的使用与使用数组中第一个元素的指针基本相同。一旦动态分配了阵列,这一点就变得非常明显,但对于静态分配的阵列也是如此

这意味着以下代码:

char arr[] = "Lorum ipsum";
指:

在堆栈上为12个字符分配足够的空间,并让arr作为指向第一个字符的指针,该指针为常量(即,指向的内容不能更改)

因此,如果你试图写:

const char * arr2 = "hello";
arr = arr2; // Error
您真正要问的是:Change
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.
长答覆:

一旦你在C++中声明了任何数组,无论是<代码> int、char还是MyClass < /C>数组,数组中的任何名称的使用与使用数组中第一个元素的指针基本相同。一旦动态分配了阵列,这一点就变得非常明显,但对于静态分配的阵列也是如此

这意味着以下代码:

char arr[] = "Lorum ipsum";
指:

在堆栈上为12个字符分配足够的空间,并让arr作为指向第一个字符的指针,该指针为常量(即,指向的内容不能更改)

因此,如果你试图写:

const char * arr2 = "hello";
arr = arr2; // Error
您真正要问的是:Change
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.
长答覆:

一旦你在C++中声明了任何数组,无论是<代码> int、char还是MyClass < /C>数组,数组中的任何名称的使用与使用数组中第一个元素的指针基本相同。一旦动态分配了阵列,这一点就变得非常明显,但对于静态分配的阵列也是如此

这意味着以下代码:

char arr[] = "Lorum ipsum";
指:

在堆栈上为12个字符分配足够的空间,并让arr作为指向第一个字符的指针,该指针为常量(即,指向的内容不能更改)

因此,如果你试图写:

const char * arr2 = "hello";
arr = arr2; // Error
您真正要问的是:Change
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.
简短回答:
为了效率。适用于不希望复制阵列的用户

当使用原始指针时,需要考虑所有这些细节,如内存管理、复制行为等,以实现自己的性能要求。另一方面,您可以使用

std::string
,它是为满足大多数正常情况而设计的。

简短回答:
为了效率。适用于不希望复制阵列的用户

当使用原始指针时,需要考虑所有这些细节,如内存管理、复制行为等,以实现自己的性能要求。另一方面,您可以使用

std::string
,它是为满足大多数正常情况而设计的。

Sho