C++ 处理C+中的字符+;(不带std::string)
我有以下代码:C++ 处理C+中的字符+;(不带std::string),c++,arrays,char,dealloc,C++,Arrays,Char,Dealloc,我有以下代码: char* value = "abcdefg"; char* secondValue = value; 第二个值将获得值的地址,ok?如果我删除“值”,第二个值将不可用,对吗 因此,我应该: char* value = "abcdefg"; secondValue = new char[strlen(value)]; strcpy(secondValue, value); delete[] secondValue; 因此,如果我删除“值”,没有问题 最后,要释放第二个值,
char* value = "abcdefg";
char* secondValue = value;
第二个值将获得值的地址,ok?如果我删除“值”,第二个值将不可用,对吗
因此,我应该:
char* value = "abcdefg";
secondValue = new char[strlen(value)];
strcpy(secondValue, value);
delete[] secondValue;
因此,如果我删除“值”,没有问题
最后,要释放第二个值,我应该做:
char* value = "abcdefg";
secondValue = new char[strlen(value)];
strcpy(secondValue, value);
delete[] secondValue;
我说得对吗?你写的有两个问题:
char*value=“abcdefg”代码>,因为它未在堆上分配。
要分配堆内存,可以使用new
(在C++中)或malloc
(在C中)
secondValue = new char[strlen(value)+1];
除此之外,你是正确的你所写的有两个问题:
char*value=“abcdefg”代码>,因为它未在堆上分配。
要分配堆内存,可以使用new
(在C++中)或malloc
(在C中)
secondValue = new char[strlen(value)+1];
除此之外,你是正确的
< P>如果你使用C++,你是正确的,除了你需要做<代码>第二值< /> >一个字符大:secondValue = new char[strlen(value) + 1];
C样式字符串以'\0'
字符结尾,该字符还需要存储空间
如果你使用C++而不是C++,则没有<代码>新< /C>或>代码> Dele[]/Cord>,你必须使用函数<代码> MalCube()/<代码>和<代码> For()/<代码>:
secondValue = malloc(strlen(value) + 1);
...
free(secondValue);
在任何情况下,请注意,在示例中,
value
是一个字符串文本,不能删除/释放。你只应该删除/释放你分配的新的/MALOC。 < P>如果你使用C++,你是正确的,除了你需要做<代码>第二值< /> >一个字符大:
secondValue = new char[strlen(value) + 1];
C样式字符串以'\0'
字符结尾,该字符还需要存储空间
如果你使用C++而不是C++,则没有<代码>新< /C>或>代码> Dele[]/Cord>,你必须使用函数<代码> MalCube()/<代码>和<代码> For()/<代码>:
secondValue = malloc(strlen(value) + 1);
...
free(secondValue);
在任何情况下,请注意,在示例中,
value
是一个字符串文本,不能删除/释放。您应该只删除/释放分别使用new/malloc分配的内容。编写代码的方式:
char* value = "abcdefg";
编译器将生成一个静态字符串“abcdefg”
,并且值将是指向该字符串的指针。您可以分配secondvalue=value
,然后让value超出范围,
secondvalue`仍然有效
在您的示例中,没有其他方法可以取消分配值
您编写代码的方式:
char* value = "abcdefg";
编译器将生成一个静态字符串“abcdefg”
,并且值将是指向该字符串的指针。您可以分配secondvalue=value
,然后让value超出范围,
secondvalue`仍然有效
在你的例子中,没有别的方法可以释放<代码>值 > ./p>你的问题被标记并命名为C,但是<代码> DELTEX/COD>是C++语法。你的问题有点糊涂。新建/删除?那是C++。也许您应该看看std::string。好的,我将更改标题,我没有权限访问我正在使用的组件上的std内容。@okami:为什么不?在任何情况下,都要重新制作。您应该将
char*
替换为const char*
。原因是概述。你的问题被标记并命名为C,但是<代码>删除<代码>是C++语法。你的问题有点糊涂。新建/删除?那是C++。也许您应该看看std::string。好的,我将更改标题,我没有权限访问我正在使用的组件上的std内容。@okami:为什么不?在任何情况下,都要重新制作。您应该将char*
替换为const char*
。原因已概述。因此,如果char*value=“abcdefg”;内部是类似结构的结构{char*value;}MyStruct;即使我删除MyStruct类型的对象,“value”数据也将是静态数据?是的,如果您使用静态常量初始化value
;内部是类似结构的结构{char*value;}MyStruct;即使我删除MyStruct类型的对象,“value”数据也将是静态数据?是的,如果使用静态常量初始化value
。