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
您真正要问的是:Changearr
,它的行为就像一个无法更改的指针,现在指向这个常量字符串中的第一个字符。这是不允许的
也就是说,如果使用指向常量字符串的指针,则可以使用以下语法:
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
您真正要问的是:Changearr
,它的行为就像一个无法更改的指针,现在指向这个常量字符串中的第一个字符。这是不允许的
也就是说,如果使用指向常量字符串的指针,则可以使用以下语法:
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
您真正要问的是:Changearr
,它的行为就像一个无法更改的指针,现在指向这个常量字符串中的第一个字符。这是不允许的
也就是说,如果使用指向常量字符串的指针,则可以使用以下语法:
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
您真正要问的是:Changearr
,它的行为就像一个无法更改的指针,现在指向这个常量字符串中的第一个字符。这是不允许的
也就是说,如果使用指向常量字符串的指针,则可以使用以下语法:
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