在vs2010下,将一个数组的值写入文件中, 具体代码如下:(源程序中截取的一部分,只有这个地方有问题) for(i = 0 ; i < len ; i++) ///记录循环次数,先选择n-1个数据 for(j = 0;j < len ; j++ ) //每次查找到一个数据就进行数据的删除以及写入,这里size肯定大于1 fwrite(buf,strlen(buf)+1,1,fp2); ///////////????????????? sort[jmax] = -1 ; } |
|
从这段程序,看不出会乱码
|
|
没啦,就是这个问题,你可以复制过去,测试一下。给你两组数据 {1,8,3,6,2,} { 21,4,543,5}肯定会有问题,跟踪一下,我估计是编译器在写数据的时候优化了,具体的原理不确定 |
|
这样测试可好:
int main(void) { FILE *fp2; fp2 = fopen("1.txt", "wb"); //int sort[] = { 1, 8, 3, 6, 2 }; int sort[] = { 21, 4, 543, 5 }; int len = sizeof(sort) / sizeof(int); int max, jmax; for (int i = 0; i < len; i++) ///记录循环次数,先选择n-1个数据 { max = sort[0]; jmax = 0; for (int j = 0; j < len; j++) //每次查找到一个数据就进行数据的删除以及写入,这里size肯定大于1 { if (max < sort[j]) { max = sort[j]; //记录数据并且保存位置 jmax = j; } } //删除最大值并存入文件,需要转化成字符 char buf[32] = { 0 }; _itoa(max, buf, 10); fwrite(buf, strlen(buf) + 1, 1, fp2); ///////////????????????? sort[jmax] = -1; } fclose(fp2); return 0; } |
|
不好意思啊,我把完整的代码贴出来,麻烦您看一下,谢谢啦。 using namespace std ; bool change(const char* pfile1,const char* pfile2) int len = 0 ; FILE* fp1 = fopen(pfile1,”rb”); while( !feof(fp1) ) ///从文件中读取数据,一个字符一个字符的读出,同时进行转成整数 for(i = 0 ; i < len ; i++) ///记录循环次数,先选择n-1个数据 for(j = 0;j < len ; j++ ) //每次查找到一个数据就进行数据的删除以及写入,这里size肯定大于1 sort[jmax] = -1 ; } END: int main() char file1[] = “1.txt” ; change(file1,file2); system(“pause”); |
|
经测试,不会乱码,
21 4 543 5 //5后需加一个空格 |
|
用fprintf
|
|
经测试,不会乱码,char file1[] = “1.txt” ;char file2[] = “2.txt” ;需加上盘符,最后一个数字后无空格的话不会进行复制。
|
|
10分 |
为什么必须加盘符呢? |
5分 |
二进制文件也可以储存字符型数据,储存方法和文本文件一样。都是使用 ASCII 编码储存的。所以我们用记事本打开某些二进制文件时,也能看到一些有意义的字符串。(无意义的乱码我们可以认为是整型或实型,不过记事本程序当作字符来解释,因此造成了乱码)
http://www.cnblogs.com/flying-roc/articles/1798817.html |
测试过了 二进制存储这些整形数据的时候 用的也是ascii码。 具体可以UltraEdit看一下
刚好符合某个字,就解释成乱码了 215 4 6 5 |
|
楼主给的2组,都没乱码。。。。
|
|
5分 |
电脑内存或文件内容只是一个一维二进制字节数组及其对应的二进制地址;
人脑才将电脑内存或文件内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息…… 推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。 对电脑而言没有乱码,只有二进制字节;对人脑才有乱码。啊 GBK:0xB0 0xA1,Unicode-16 LE:0x4A 0x55,Unicode-16 BE:0x55 0x4A,UTF-8:0xE5 0x95 0x8A |