如何在.c ++中将.txt文件复制到char数组

use*_*184 14 c++ arrays

我试图将整个.txt文件复制到char数组中.我的代码可以工作,但它会遗漏白色空格.因此,例如,如果我的.txt文件读取"I Like Pie"并将其复制到myArray,如果我使用for循环播放我的数组,我会得到"ILikePie"

这是我的代码

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

int main () 
{
  int arraysize = 100000;
  char myArray[arraysize];
  char current_char;
  int num_characters = 0;
  int i = 0;

  ifstream myfile ("FileReadExample.cpp");

     if (myfile.is_open())
        {
          while ( !myfile.eof())
          {
                myfile >> myArray[i];
                i++;
                num_characters ++;
          }      

 for (int i = 0; i <= num_characters; i++)
      {

         cout << myArray[i];
      } 

      system("pause");
    }
Run Code Online (Sandbox Code Playgroud)

有什么建议?:/

Nem*_*ric 35

myfile >> myArray[i]; 
Run Code Online (Sandbox Code Playgroud)

你正逐字逐句阅读文件,导致空间被跳过.

您可以将整个文件读入字符串中

std::ifstream in("FileReadExample.cpp");
std::string contents((std::istreambuf_iterator<char>(in)), 
    std::istreambuf_iterator<char>());
Run Code Online (Sandbox Code Playgroud)

然后你可以contents.c_str()用来获取char数组.

这是如何工作的

std::string有范围构造函数,复制[first,last]范围内的字符序列,注意它不会以相同的顺序最后复制:

template <class InputIterator>
  string  (InputIterator first, InputIterator last);
Run Code Online (Sandbox Code Playgroud)

std::istreambuf_iterator iterator是输入迭代器,它从流缓冲区中读取连续的元素.

std::istreambuf_iterator<char>(in)
Run Code Online (Sandbox Code Playgroud)

将为我们ifstream in(文件的开头)创建迭代器,如果你没有将任何参数传递给构造函数,它将创建流结束迭代器(最后位置):

默认构造的std :: istreambuf_iterator称为流末端迭代器.当有效的std :: istreambuf_iterator到达底层流的末尾时,它变得等于流末尾迭代器.取消引用或递增它会进一步调用未定义的行为.

因此,这将从文件中的第一个字符开始复制所有字符,直到下一个字符是流的结尾.


Did*_*era 9

使用以下代码段:

FILE *f = fopen("textfile.txt", "rb");
fseek(f, 0, SEEK_END);
long fsize = ftell(f);
fseek(f, 0, SEEK_SET);

char *string = (char *)malloc(fsize + 1);
fread(string, fsize, 1, f);
fclose(f);

string[fsize] = 0;
Run Code Online (Sandbox Code Playgroud)