我有一个c ++ char缓冲区,我在其中重复读取文件中的字符。读完每一行后,我将缓冲区转换为字符串,以便进行其他处理和存储。
int main() {
char buf[1024];
FILE *f;
while(1) {
fgets(buf, MAXBUF, f); //read a line from a file
string s1(buf);
string *s2 = new string(buf);
}
}
将缓冲区转换为字符串时,是自动复制还是必须明确复制?即,我应该将上述代码重写为:
string s1(strdup(buf));
string *s2 = new string(strdup(buf));
答案 0 :(得分:1)
不,在分配到std :: string时,您不需要stroup char *。该字符串将自动创建自己的副本,并处理所述副本的所有内存管理。
答案 1 :(得分:1)
将缓冲区转换为字符串时,是自动复制,还是必须明确复制?
您不仅不需要调用strdup
来创建s1
,还会导致内存泄漏。
strdup
为输入字符串的副本分配内存并将该内存返回给您。
string
的构造函数生成输入字符串的副本。
因此,strdup
分配的内存在您的程序中丢失。
不要使用它。只需使用:
string s1(buf);