c - 如何保留稍后销毁的字符串的内容?

标签 c string pointers

我有两个字符串,string0string1string0char * 类型,而 string1const char * 类型。 string1 指向在堆上分配的数据,当空间被释放时它变得无效,但我知道我稍后会需要它的内容。

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

string0 = (char *) string1;

由于这两个都是指针,一旦内存被释放,它们就都失效了。这就是我尝试这个的原因:

strcpy(string0, string1);

但这会产生错误:Segmentation fault (core dumped)。即使在释放堆之后,我还能尝试保留 string1 的内容吗?

最佳答案

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

关于c - 如何保留稍后销毁的字符串的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52263867/

相关文章:

c - C 中的插入排序未正确迭代数组

c - 为什么 malloc 将 gcc 中的值初始化为 0?

c - Chan的FAT FILE SYSTEM MODULE写入字节数有限制吗?

c - 为什么总是崩溃?

string - 如何在 Julia 中获取字符串的子字符串?

c - "&="C 操作错误

wpf - 如何在 WPF 中执行 Graphics.DrawString() 的等效操作?

MySQL:无法正确将字符串值与日期进行比较

c - 当我们有值而不是指针时如何检查空指针取消引用

c - 动态二维数组 - 分配不起作用(段错误)