从文件中读取数据;第一个包是胡言乱语

时间:2014-03-09 01:51:31

标签: c++ c arrays variable-assignment

我试图从文件中一次读取1244个字节。本质上,我们的想法是将100KB的数据分段为数据包。所以我采取的方法是,将所有数据分配给一个数组,然后创建一个指针数组,其中包含每个数据包的起始位置。指针数组包含值[0,1244,2488等]。

它完美无缺,除了我的第一个任务是胡言乱语。 k [0]和o [0]都得到了垃圾,剩下的79个值似乎没问题。有人可以帮忙吗?

我意识到fread命令的第一个参数应该是一个指针,但这也有效。此外,我需要指向每个数据包的起始指针,因为我正在进行其他函数调用(从代码中省略),使用适当的标头正确格式化数据包。

自从我使用c / c ++进行编码以来,已经有一段时间了,因此您可以提供任何优化。非常感谢。

int main(int argc, const char * argv[])
{
    FILE *data;
    int size; int i;
    int paySize = 1244;
    //int hdrSize = 256;

    data = fopen("text2.dat","r"); 

    //get data size
    fseek(data, 0, SEEK_END);
    size = ftell(data);
    rewind (data);

    char k[size]; //initializing memory location for all the data to be read in.

    fread(k, 1, size, data); //reading in data

    int temp = ceil(size/paySize);

    char * o[temp]; //array of pointers to beginning of each packet.

    int q = 0;

    for (i = 0; i < size; i = i+paySize)
    {
        o[q] = &k[i];
        q++;
    }

    cout << o[0] << endl; //this outputs gibberish! 

1 个答案:

答案 0 :(得分:0)

cout << o[0] << endl;

打印此指针指向的地址。要在此地址打印值,请使用:

cout << *o[0] << endl;

下面:

char k[size];
char * o[temp];

o[q] = &k[i];

您分配给o[]指向字符的指针,将这样的指针结果解除引用一个char