我试图从文件中一次读取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!
答案 0 :(得分:0)
cout << o[0] << endl;
打印此指针指向的地址。要在此地址打印值,请使用:
cout << *o[0] << endl;
下面:
char k[size];
char * o[temp];
o[q] = &k[i];
您分配给o[]
指向字符的指针,将这样的指针结果解除引用一个char
。