Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.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+中的字符+;(不带std::string)_C++_Arrays_Char_Dealloc - Fatal编程技术网

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