【关于C语言二进制拷贝文件的几个问题】
【关于C语言二进制拷贝文件的几个小问题】
1 为什么 必须要用wb rb 如果不加b 那么默认我记得写变量到文件里 打开看也是乱码的 用UE打开可以看到 应该是二进制的写入的啊
2 char *buffer = (char*)malloc(sizeof(char)*nLen+1);
//这里用int数组也可以哦 注意用int时把下面三处的nLen+1的+1去掉
int *buffer = (int*)malloc(sizeof(int)*nLen);
//void 指针 不知道是个什么意思 竟然也可以
void *buffer = (void*)malloc(nLen);
这三种方法都可以二进制复制文件 都有什么区别 哪个是正确的?
谢谢各位 探讨一下
------解决方案--------------------
1 windows平台,要指定b,二进制方式读
2 本质都是分配一块空间,都可以
------解决方案--------------------
不要把
fopen("...","...");fscanf,fprintf,fclose //读时把\r\n替换成\n,写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待
和
fopen("...","...b");fread,fwrite,fclose //不作以上替换,遇到\x1a仍继续读;读写的内容当字节看待
弄混了
- C/C++ code
#include<stdio.h> #include <malloc.h> int main(void) { int nLen; FILE *fp,*fp1; fp=fopen("123.exe","rb"); fseek(fp,0L,SEEK_END); nLen = ftell(fp); char *buffer = (char*)malloc(sizeof(char)*nLen+1); //这里用int数组也可以哦 注意用int时把下面三处的nLen+1的+1去掉 //int *buffer = (int*)malloc(sizeof(int)*nLen); //void 指针 不知道是个什么意思 竟然也可以 //void *buffer = (void*)malloc(nLen); if (buffer==NULL) { printf("memory error!\n"); } fseek(fp,0,SEEK_SET); fread(buffer,nLen+1,1,fp); fclose(fp); fp1=fopen("456.exe","wb"); fwrite(buffer,1,nLen+1,fp1); fclose(fp1); free(buffer); }
1 为什么 必须要用wb rb 如果不加b 那么默认我记得写变量到文件里 打开看也是乱码的 用UE打开可以看到 应该是二进制的写入的啊
2 char *buffer = (char*)malloc(sizeof(char)*nLen+1);
//这里用int数组也可以哦 注意用int时把下面三处的nLen+1的+1去掉
int *buffer = (int*)malloc(sizeof(int)*nLen);
//void 指针 不知道是个什么意思 竟然也可以
void *buffer = (void*)malloc(nLen);
这三种方法都可以二进制复制文件 都有什么区别 哪个是正确的?
谢谢各位 探讨一下
------解决方案--------------------
1 windows平台,要指定b,二进制方式读
2 本质都是分配一块空间,都可以
------解决方案--------------------
不要把
fopen("...","...");fscanf,fprintf,fclose //读时把\r\n替换成\n,写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待
和
fopen("...","...b");fread,fwrite,fclose //不作以上替换,遇到\x1a仍继续读;读写的内容当字节看待
弄混了