0

我正在尝试从一个文件复制到另一个以二进制模式打开的文件

这里:

pdata 是指向要从中获取输入的文件的文件指针

outfile 是指向要写入数据的文件的文件指针。

我的输入文件大约 400mb,程序执行结束后,输出文件只包含 80mb。为什么不复制完整的文件?

我知道当我尝试计算数据包数量时会留下一些字节。

int num_RTP_packets=file_Size/(TS_PKT_SIZE * MAX_TS_PKTS); //Total no of Packets

for(int i=0;i<num_RTP_packets;i++)
{  
    long result;

    uint8* m_RTPPacketBuf =(uint8*) malloc(TS_PKT_SIZE * MAX_TS_PKTS); 

    int chunk=TS_PKT_SIZE* MAX_TS_PKTS;

    result=fread (m_RTPPacketBuf,chunk,1,pData); 

    fprintf(out_file,"%s",m_RTPPacketBuf);

    free(m_RTPPacketBuf);
}

提前致谢。

4

2 回答 2

1

您正在使用fprintf()写入数据。%s表示一个字符串。我猜你在终止字符串的数据中有一个零字节。

我会fwrite()改用。(见教程)。

于 2013-06-17T09:27:25.267 回答
1

fwrite代替fprintf. _

fwrite(m_RTPPacketBuf, chunk, 1,outfile );

请考虑以下建议,

  1. result循环外的移动和其他声明
  2. chunk可以用常量/宏替换,如果常量则显然放置在外部循环。
  3. malloc可以避免,因为要分配的内存不变,而是可以使用固定大小的数组。
  4. 检查 和 的返回freadfwrite
于 2013-06-17T09:27:39.093 回答