gpt4 book ai didi

c++ - 从文件中读取数据;第一个数据包是乱码

转载 作者:行者123 更新时间:2023-11-30 17:37:49 25 4
gpt4 key购买 nike

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

它工作得很好,除了我的第一个作业是胡言乱语。 k[0] 和 o[0] 都出现垃圾,而其余 79 个值似乎没问题。有人可以帮忙吗?

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

自从我用 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!

最佳答案

cout << o[0] << endl;

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

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

这里:

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

o[q] = &k[i];

您将指向字符的指针分配给o[],取消引用此类指针会产生单个char

关于c++ - 从文件中读取数据;第一个数据包是乱码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22277463/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com