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

直接向未分配内存的指针存入字符串是否为良好C编程实践?

问题解答

你的观点存在误解,这个函数的写法属于合理的编程实践,并不会造成RAM混乱,原因如下:

  • 函数的char* text参数并非未分配内存的野指针,它是由调用者预先分配好内存后传入的——可能是栈上的字符数组(比如char buf[100]; load_text(buf, 100);)、静态数组,或者堆上动态分配的内存。fgets是将输入内容写入这块已经合法的内存区域,而非写入随机的RAM地址。

  • 变量result只是接收fgets的返回值:fgets成功读取时会返回传入的text指针(即指向那块已分配的内存),失败时返回NULL。函数返回result是为了让调用者判断读取操作是否成功,并不是把字符串存入result指向的新内存。

你担心的“写入未分配内存的野指针”是另一种错误场景:比如直接声明char* ptr; fgets(ptr, 100, stdin);,这时候ptr是未初始化的野指针,指向随机地址,才会导致内存错误。但本函数的逻辑完全不同,它依赖调用者提供合法的内存缓冲区,这种设计反而清晰——内存的分配和释放由调用者负责,避免了函数内部分配内存带来的资源管理混乱。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 06:35:51