Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.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++ 重载运算符=用于字符*_C++ - Fatal编程技术网

C++ 重载运算符=用于字符*

C++ 重载运算符=用于字符*,c++,C++,不要对我的第一个问题太苛刻 当我以这种方式使用字符数组时: char s[50]=某个字符串; 这很有效。 但这样做: 二, 编译器不同意将const char放入char* A我知道正确的方法。 我也知道如何使用字符串。但是我们的老师要求学生在作业中只使用char* 我的问题是: 我可以为char*重载运算符吗? 因为我在学校里问过这个问题,结果被拒绝了 但也许有人能帮我找到“如何” 或者至少要理解“为什么不?”< /P> < P> C++标准不允许您在没有操作数有类或枚举类型的情况下重载运算

不要对我的第一个问题太苛刻

当我以这种方式使用字符数组时:

char s[50]=某个字符串; 这很有效。 但这样做:

二,

编译器不同意将const char放入char*

A我知道正确的方法。 我也知道如何使用字符串。但是我们的老师要求学生在作业中只使用char*

我的问题是:

我可以为char*重载运算符吗? 因为我在学校里问过这个问题,结果被拒绝了

但也许有人能帮我找到“如何”
或者至少要理解“为什么不?”< /P> < P> C++标准不允许您在没有操作数有类或枚举类型的情况下重载运算符。因此,不能为CAR*超载运算符=,因为它被C++标准禁止。运算符重载不允许您重写内置运算符的行为。

这是因为编译器正在帮助您防止意外修改字符串文字,即常量字符*

您需要使用strcpy来完成此操作

char *s = new char[50];
strcpy(s, "Another string");
// Modify s as you please here..
s[0] = 'a';
printf("%s\n", s); // prints 'another string'

你不能超载。在特定的情况下,需要调用标准C++标题字符串或C标题字符串中声明的StrcPy。但请注意,这是C运行时函数。C语言中的C++编程是一种很差的编码实践。考虑使用STD::String在C++中。

你有没有练习的确切描述?即使它被允许,然后char *s2=新char(50);s2=另一个字符串仍然泄漏内存1并没有真正按照您的想法执行。它愚弄了您,使您认为您有时可以分配char*变量。你不能,这就是条纹的作用。或者学习使用std::StringThank。我知道如何使用strcpy。我的问题更多的是关于“为什么不?”。char*表示指针指向一个可变的char数组。字符串文字是常量字符*,这意味着任何指向它的指针都不能修改内容,因为结果是未定义的。因此,编译器会阻止您将常量char*分配给char*,因为这将允许您修改该字符串文字,无论出于何种目的,它都是只读的。Mutable意味着您甚至可以通过const方法更改变量。还是不?@NoOrdinaryLove-在这里要非常小心;数组和指针不是一回事,尽管它们的行为通常是一样的。char*是指向可变字符的指针。该字符可能是数组的一部分,但不一定是数组的一部分。char ch;char*s=&ch;。字符串文字不是常量字符*。这是一个常量字符[N],其中N是文本中的字符数加上nul终止符的一个。这会让人困惑,因为在大多数上下文中,数组的名称会衰减为指向其第一个元素的指针。@BessietCow-即使使用常量转换,也不能修改字符串文字。它是常量对象,因此无法修改。在形式上,行为是未定义的;回到过去,字符串文字被放在普通内存中,事实上,它们可以被修改。现在,它们大多在只读内存中,您无法更改它们。
char *s = new char[50];
strcpy(s, "Another string");
// Modify s as you please here..
s[0] = 'a';
printf("%s\n", s); // prints 'another string'
char *x = "Hello, world!"; // Compiler error/warning is raised here, depending on its modernity
*x[0] = 'h'; // Try to change to 'hello, world!'
// Actual result: Segfault, Bus error, etc. (cannot change read-only memory)