zoukankan      html  css  js  c++  java
  • 杂记

    1.默认fopen只能打开2G以下的文件,

    2.fopen以更新方式打开文件(模式中+号,例如“r+”/“w+”/“a+”),不能读完就写,写完就读,中间需要调用干预函数(例如fseek等)进行读写转换。

    Question:http://bbs.csdn.net/topics/391907768

    Solution:http://pubs.opengroup.org/onlinepubs/9699919799/functions/fopen.html

    3.http://www.cnblogs.com/ascii0x03/p/4838671.html

    默认使用文本模式读写文件惹的祸:windows下,文本模式会将 输出成 ,读取时也会将 变成一个 ;所以开始程序B读取文件F并且计算MD5时,是以 来计算的。然而当从服务器上下载下来时,文件是以 作为行结尾的,直接计算MD5会导致值不一样。而将下载下来的文件保存时,由于仍然使用的文本模式,将 变成了 ,导致了当初匪夷所思的结果。

    “使用二进制文件模式时,程序将数据从内存传递给文件(反之亦然)时,将不会发生任何隐藏的转换,而默认的文本模式并非如此。例如,对于Windows文本文件,他们使用两个字符的组合吧(回车和换行)表示换行符;Mac文本文件使用回车表示换行符;而UNIX和Linux文件使用换行来表示换行符。C++是从UNIX系统上发展而来的,因此也使用换行来表示换行符。为增加可移植性,Windows C++程序在写文本模式文件时,自动将C++换行符转换为回车和换行;Mac C++程序在写文件时,将换行符转换为回车。在读取文本文件时,这些程序将本地换行符转换为C++模式。对于二进制数据,文本格式会引起问题,因为double值中间的字节可能与换行符的ASCII码有相同的位模式。另外,在文件末尾的检测方式也有区别。因此以二进制格式保存数据时,应使用二进制文件模式。”

    4.使用fwrite向文件写入结构体时,包含结构体对齐产生的补齐字节

    5.有符号整型进行移位操作结果是与编译器有关的,简而言之,不要对有符号整型数进行位移操作.

    例如想要取int型最大值

    //正确
    int max = ~0U >> 1;
    //错误
    int max = ~0 >> 1;//wrong way

    6.判断一个整数是否是 2的幂

    n &(n-1) == 0 ? 1 : 0

    7.编写C程序的注意

    效率与可维护性 可移植性

    8.popen()打开的文件描述符是管道,不能对其执行 fseek()等操作,否则 pclose()时会导致coredump

  • 相关阅读:
    HDOJ骨头的诱惑
    DP Big Event in HDU
    hoj1078
    poj2728
    hoj1195
    poj2739
    poj2726
    海量并发也没那么可怕,运维准点下班全靠它!
    云上安全工作乱如麻,等保2.0来一下
    实践案例丨教你一键构建部署发布前端和Node.js服务
  • 原文地址:https://www.cnblogs.com/LubinLew/p/Hodgepodge.html
Copyright © 2011-2022 走看看