我是C语言的新手,关于malloc()的使用有几个问题: 可以重复使用已分配的内存块吗?更具体地说,我想做的是以下内容(尝试使用fgets解析文件):
#include <stdio.h>
#include <stdlib.h>
main() {
/*... some code here to open a file and give pointer to fp */
char *s=(char*) malloc(MAX_CHAR_IN_LINE);
do {
//QUESTION: is this right to reuse s in each iteration?
fgets(s,MAX_CHAR_IN_LINE,fp);
} while (*s!=NULL);
free(s);
}
谢谢!
感谢您的回答!以下是相关问题和答案的摘要
Q: 我担心会出现以下情况:在第一次迭代中,读取了5个字符,例如“abcde”;在第二次迭代中,只读取了3个字符(较短的行),例如“fgh”。我最终会得到“fghde”,这似乎很奇怪? - user3424826
A: 在C语言中,字符串以空字符结尾。是的,旧字符串的一部分仍然存在,但会有一个NUL字符标记新字符串的结尾。将来,如果您有特定的担忧(比如那个问题),请提前展示出来,以便可以直接解决问题,而不需要来回沟通。那只会浪费每个人的时间。 - Jonathon Reinhart
Q: 也许我应该这样重新表达我的问题:每次重用之前是否需要清除已分配的空间?(在重用之前清除每个字节)
A: 对这个问题的答案是:这取决于情况。如果你正在处理一个C字符串,那么不需要清除它(因为有空字符,正如我所提到的)。如果它是动态分配的(malloc'd)结构体,那么是的,你应该memset(p, 0, sizeof(*p)),或手动将每个成员设置为零。 - Jonathon Reinhart
malloc
提供的缓冲区吗?这是你的内存,你已经分配了它。你可以随意使用它,直到你释放它。 - Jonathon Reinhart