代码之家  ›  专栏  ›  技术社区  ›  Hanlon

如何保存稍后销毁的字符串的内容?

  •  0
  • Hanlon  · 技术社区  · 6 年前

    我有两条线, string0 string1 . Strug0 属于类型 char * 虽然 STRIGE1 属于类型 const char * . STRIGE1 指向在堆上分配的数据。释放空间后,它将变为无效数据,但我知道稍后需要它的内容。

    由于内存稍后被释放,因此我无法执行以下操作:

    string0 = (char *) string1;
    

    由于这两个都是指针,一旦释放内存,这两个指针都将失效。这就是我为什么要这么做的原因:

    strcpy(string0, string1);
    

    但这会产生一个错误: Segmentation fault (core dumped) . 我还可以试着保存 STRIGE1 即使在释放堆之后?

    1 回复  |  直到 6 年前
        1
  •  5
  •   Schwern    6 年前

    strcpy 不为您分配内存。你需要分配足够的内存 string0 在复制任何东西之前。对于终止的空字节,不要再忘记1个。

    // No size is needed because `char` is always 1 byte
    char *string0 = malloc( strlen(string1) + 1 );
    strcpy( string0, string1 );
    

    这个 POSIX strdup function 为你做这个。它更安全,更容易理解。

    char *string0 = strdup(string1);
    

    或者,如果可能的话,只是不自由 string1 首先。