Q:

Can't read data from .dat file (VS2012 C++ project created from Simulink)

Edit:Thank you, The fixed code for those who are interested:
ert_main.cpp:
#include <stdio.h>                     /* This ert_main.c example uses printf/fflush */
#include "Rx.h"                        /* Model's header file */
#include "rtwtypes.h"                  /* MathWorks types */
#include <stdlib.h>
#include <iostream>
#include <istream>
#include <sstream> 
#include <fstream>
#include <string> 
//#include <ofstream>//for writing results to file
//#include <ifstream> //doesn't work
#include <vector>
#define lengthOFSignal 5000 

at main func:           
 using namespace std;
        std::vector<std::string> words;
         std::string word;
        ifstream  iFile;
        string path = __FILE__; //gets source code path, include file name
        path = path.substr(0,1+path.find_last_of('\\')); //removes file name
        string testFileName = "LEGACY_R12_800BITS_40MHz.dat";
        path+= testFileName; //adds input file to path
        int signal_length=0;

    std::vector<real_T> real_part_VEC, imag_part_VEC;
    std::istringstream ss;
    real_T real_temp, imag_temp;

    iFile.open(path,ios::binary );
     //iFile.open(path.c_str(), ios::binary);
    if (iFile.is_open()) {
         while (std::getline(iFile, word)) {
            words.push_back(word);
        }
        iFile.close();
    }

    signal_length=words.size();
 for(int i=0; i< signal_length;i++)
  {
      ss.str(words[i]);
      ss >> real_temp >> imag_temp;
      real_part_VEC.push_back(real_temp);
      imag_part_VEC.push_back(imag_temp);
  }

    real_T real_part[lengthOFSignal];
    real_T imag_part[lengthOFSignal];

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

        real_part[i]=real_part_VEC[i];
        imag_part[i]=imag_part_VEC[i];
    }

     /* Initialize model */
    Rx_initialize(real_part,imag_part,signal_length);

The OLD code and problem :

The .dat file looks like two straight columnes with numbers (spaced)

I get an error regarding looping on the readed data (strtok -> atof (Null pointer) )
edited ert_main.cpp main function:
#include <stdio.h>                     /* This ert_main.c example uses printf/fflush */
#include "Rx.h"                        /* Model's header file */
#include "rtwtypes.h"                  /* MathWorks types */
#include <stdlib.h>
#include "mat.h"
#define lengthOFSignal 5000
#define SizeOfLine 35

int_T main(int_T argc, const char *argv[])
{
  /* Unused arguments */
  (void)(argc);
  (void)(argv);

  int i=0;
    char bFileName[] = "QPSK_SISO_802_11_packet_awgn_fr_shft.dat";
    char chr[SizeOfLine*lengthOFSignal];
    char *token;
    real_T real_part[lengthOFSignal];
    real_T image_part[lengthOFSignal];
    int signal_length=0;

    std::ifstream  iFile(bFileName, std::ios::binary);
    iFile.getline(chr,100);
    for(int i=0; i<lengthOFSignal; i++) {
        if (chr== NULL)  break;
                token= strtok(chr," ");
            real_part[i]=atof(token); // real part.---problem occurs here!!!!
            token= strtok(NULL," ");
            image_part[i]=atof(token);// imaginary part.
            iFile.getline(chr,100);
            signal_length++;

    }
    iFile.close();

     /* Initialize model */
    Rx_initialize(real_part,image_part,signal_length);

  /* Attach rt_OneStep to a timer or interrupt service routine with
   * period 40.0 seconds (the model's base sample time) here.  The
   * call syntax for rt_OneStep is
   *
   *  rt_OneStep();
   */
  printf("Warning: The simulation will run forever. "
         "Generated ERT main won't simulate model step behavior. "
         "To change this behavior select the 'MAT-file logging' option.\n");
  fflush((NULL));
  while (rtmGetErrorStatus(Rx_M) == (NULL)) {
    /*  Perform other application tasks here */
      rt_OneStep();
      if(Rx_Y.EVM!=0) break;
  }

  /* Disable rt_OneStep() here */

  /* Terminate model */
  Rx_terminate();
  return 0;
}

link to the solution (VS 2012)
link to the project/solution

A:

You are trying to convert more than the input length. That is creating the debug assertion error. As a suggestion, try to read the data in as numbers. Makes life a lot easier. 

Edit: I am adding onto the previous statement. I have used istringstream to parse the string into a number. I just checked this for a number but you can easily expand this. 
std::string str("2.1506668e-03");
std::istringstream ss;
ss.str(str);
double x;
ss >> x;
std::cout << x << std::endl;

Ans: 0.0021567

New edit: Ah! This code is much better. But you still need to iron out some very basic errors. 
1> The file.is_open failing can only be due to the file not being found. Try to find out if the file is in the search path. The easiest way to do it is copying the file onto the project file folder. 
2> Using vectors always make sense when the size is undetermined. Btw, you can determine the size of a file and thus the size of the arrays using fseek and ftell.
3> Just a cursory glance reveals that this statement std::string real_str("words[i]");should be changed to std::string real_str(words[i]); The previous one takes the string words[i] as input. 
4> In the for loop, you are looping for the signal_length but you are using words[i] and words[i+1]. So only half the vector would be read in such a case. 
I would just read the line as a whole into the word vector and then parse it into real and imaginary parts 
 std::vector<std::string> words;
 std::string word;
 if (fin.is_open()) {
    while (std::getline(fin, word)) {
        words.push_back(word);
    }
    fin.close();
 }

// I would declare two vectors 
std::vector<real_T> real_part, imag_part;
std::istringstream ss;
real_T real_temp, imag_temp;

// for loop
for(int i=0;i<words.size();i++)
{
      ss.str(words[i]);
      ss >> real_temp >> imag_temp;
      real_part.push_back(real_temp);
      imag_part.push_back(imag_temp);
}

