【发布时间】:2019-12-10 08:33:13
【问题描述】:
#include <cstring>
char* str0;
const char* str1 = "abc";
// assign str1 to str0
strcpy(str0, str1); // syntax correct, but run time error
str0 = str1; // syntax error, cannot convert const char* to char*
string n_str = str1;
str0 = n_str; // syntax error, cannot convert ...
cout << str0 << endl; // expected output: abc
我想在运行时(编译后)使 str0 与 str1 相同,我不知道该怎么做。对于str0 = str1; 的情况,我不明白为什么它不起作用,因为 str0 指向任何内容,而 str1 指向 const 字符串文字,所以如果我现在让 str0 指向 str1 指向的内容,它应该没关系,但事实并非如此。那么有没有办法解决呢?
【问题讨论】:
-
strcpy应该在哪里复制字符串?无处可去?你应该先分配一些内存给str0指向。 -
要么
strdup要么先分配内存。分配不起作用,因为它是const,您不能通过分配将其删除。 -
文字字符串(如
"abc")实际上是常量字符的数组。为什么你想要一个指向这样一个数组的非常量char指针?您需要解决的真正问题是什么?现在这太过分了XY problem。 -
@Someprogrammerdude 原来的问题是,有一个类,其中一个成员数据为 char* 类型,还有一个构造函数。构造函数具有 const char* 类型的参数之一,构造函数应将成员数据设置为构造函数参数中传递的内容。这是作业的一部分,我不能在网上发布对不起
-
你不必贴出你的实际代码,只需一个简单的minimal reproducible example 来说明问题,当然也请直接询问实际问题。在这种情况下,您需要为对象中的字符串动态分配内存,并复制内容(并且不要忘记字符串空终止符)。