直接向未分配内存的指针存入字符串是否为良好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
相关产品推荐
相关产品推荐

