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

  • 相关阅读:
    关于JSON可能出现的错误,待更/todo
    mongoose的安装与使用(书签记录) 2017
    HTTP的学习记录3--HTTPS和HTTP
    HTTP的学习记录(二)头部
    HTTP(一)概述
    LeetCode 455. Assign Cookies
    LeetCode 453. Minimum Moves to Equal Array Elements
    LeetCode 448. Find All Numbers Disappeared in an Array
    LeetCode 447. Number of Boomerangs
    LeetCode 416. Partition Equal Subset Sum
  • 原文地址:https://www.cnblogs.com/LubinLew/p/Hodgepodge.html
Copyright © 2011-2022 走看看