我有两个非常大的数字(每个数字最多23位数字),我希望将它们尽快打印到文件中。文件中的行应如下所示:


  number1 [space] number2 [\ n]例如123456789999999 99999965454644


我的方法是将行收集到一个大缓冲区中,然后在缓冲区已满时,使用fwrite()将其写入文件。

最大的问题是,我不知道如何从这两个数字创建一个字符串并将其保存到一个字符串/字符数组中。正如我提到的,字符串的长度是可变的,它只能是3个字符,甚至是50个字符。

const int OUT_BUFFER_SIZE = 65536;
string out_buffer[OUT_BUFFER_SIZE];
int out_size = 0;
FILE* output_file = fopen("result.out", "w");

void print_numbers(FILE* f, long long num1, long long num2)
{
  const int ELEMENT_SIZE = 50;

  char line[ELEMENT_SIZE];
  sprintf(line, "%lld %lld\n", num1, num2);
  out_buffer[out_size] = line;
  out_size++;

  if (out_size == OUT_BUFFER_SIZE)
  {
     fwrite(out_buffer, ELEMENT_SIZE, OUT_BUFFER_SIZE, f);
  }
}

fclose(output_file);


还有其他方法可以解决这个问题吗?谢谢。

编辑1:
我尝试了两种其他方法:

1)使用fprintf(f, "%lld %lld\n", num1, num2);将数字立即写入文件

2)使用ofstream与@somnium完全相同。

我对它们都进行了测量,令人惊讶的是,1)方法比第二种方法快2倍。

最佳答案

如果您使用的是C ++,而不是纯C,则可以使用:

#include <iostream>
#include <fstream>
using namespace std;

void print_numbers(const std::string fname, long long num1, long long num2)
  ofstream myfile;
  myfile.open (fname);
  myfile << num1 << " " << num2 << '\n';
  myfile.close();
  return 0;
}


那已经做了必要的缓冲底层。

关于c++ - C++如何将字符串块写入文件?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40277797/

10-11 22:42
查看更多