【发布时间】:2014-03-09 01:51:31
【问题描述】:
我试图一次从文件中读取 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!
【问题讨论】:
-
因为是k[i]的地址?你想要的可能是 *o[0]
-
您对
cout << o[0] << endl;行的期望是什么?您希望它打印文件中的第一个字符吗?还是整个第一个数据包? -
我希望它打印文件的前 1244 个字节。当我将索引值更改为 1 或其他任何值时,它会打印从输入文件中提取的全部 1244 字节信息。
-
我要求确认;
k[0]也不打印文件上的第一个字符显然是什么? -
是的.. 抱歉,这是我的错误.... k 或 o 的索引不会有 1244 字节。我必须在 for 循环中打印以获取所有 1244 个字节。
标签: c++ c arrays variable-assignment