首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

fgetc在linux与windows下对ASCII 26的差异有关问题

2012-03-16 
fgetc在linux与windows下对ASCII 26的差异问题C/C++ code#includeiostream#includefstream#includest

fgetc在linux与windows下对ASCII 26的差异问题

C/C++ code
#include<iostream>#include<fstream>#include<string>using namespace std;int main(int argc, char*argv[]){    fstream testfile("test.txt",ios::out|ios::out|ios::binary);    int a = 0;    int nums[1000];    for(; a < 256; a++)    {        testfile.write((char *) &a, 1);    }    testfile.close();    FILE* fp = fopen("test.txt", "r");    int temp;    int i = 0;    while(true)    {        temp = fgetc(fp);        if (temp == EOF) break;        i++;    }    cout << i << endl;    fclose(fp);    return 0;}


这个代码在linux上面的输出是:256
在windows上是:26

我的Linux信息:Linux version 2.6.18-274.3.1.el5 (mockbuild@builder10.centos.org) (gcc version 4.1.2 20080704 (Red Hat 4.1.2-51)) #1 SMP Tue Sep 6 20:14:03 EDT 2011
windows是用vs2010编译的
请高手解释一下。

[解决办法]
楼主知道什么叫“文本”模式么?
知道什么叫“二进制”模式么?

[解决办法]
看一下以前的贴,里面讨论的比较全
http://topic.csdn.net/u/20090706/22/10a2a1c6-8cd2-4b26-858b-2c20cbc97242.html
另个,换行(\n)在windows的文本下也与二进制不同,它会变成\n\r两个字符
可参考:
http://blog.csdn.net/dbzhang800/article/details/6430280

[解决办法]
探讨

引用:

简单说一下吧(建议看下有关资料)
windows 下,读文本文件时(缺省的文件打开方式),如果遇到ascii 26(0x1a ctrl-Z),就会返回EOF
这个是规定
也可以说,ascii 26是windwos下文本文件的结束符


多谢这位兄弟。请问相关资料推荐吗?感觉这个规定有些奇怪,
从上面的结果来看,linux下面好像没有类似这种规……

热点排行