You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在C语言中如何为字符串分配内存以复制至新内存空间?

在C语言中为字符串"Best School"分配足够内存的方法

你试过的这两种写法都完全可行,能给目标字符串分配足够的内存:

你已经尝试的有效方案

  • malloc(strlen("Best School") + 1):strlen()只统计字符串里的可见字符数,不包含末尾的\0终止符,所以加1就是给这个关键的终止符留位置,确保复制出来的是合法的C字符串。
  • malloc(sizeof("Best School")):字符串字面量"Best School"在内存里本身就带着结尾的\0,sizeof()会返回整个字符串(包括终止符)的总字节数,用这个值分配内存刚好够装下完整的字符串。

其他可选的内存分配方式

除了上面两种,你还可以用这些方法:

  • calloc(strlen("Best School") + 1, sizeof(char)):calloc不仅会分配内存,还会把所有字节初始化为0,相当于自动帮你把终止符的位置填好。不过就算不用这个初始化,后续用strcpy之类的函数复制字符串时也会覆盖终止符,但这种方式同样能保证内存足够。
  • 如果是在栈上分配(非堆内存),可以直接写char new_str[sizeof("Best School")];,不过栈内存空间有限,只适合短字符串,而且变量离开作用域后内存会被自动释放,没法长期保存。

另外要记住,用malloc或calloc分配的堆内存,不用的时候一定要用free()释放,不然会造成内存泄漏。

内容的提问来源于stack exchange,提问作者Frank Okey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 21:42:33