ITÊýÂë ¹ºÎï ÍøÖ· Í·Ìõ Èí¼þ ÈÕÀú ÔĶÁ ͼÊé¹Ý
TxTС˵ÔĶÁÆ÷
¡ýÓïÒôÔĶÁ,С˵ÏÂÔØ,¹ÅµäÎÄѧ¡ý
ͼƬÅúÁ¿ÏÂÔØÆ÷
¡ýÅúÁ¿ÏÂÔØͼƬ,ÃÀŮͼ¿â¡ý
ͼƬ×Ô¶¯²¥·ÅÆ÷
¡ýͼƬ×Ô¶¯²¥·ÅÆ÷¡ý
Ò»¼üÇå³ýÀ¬»ø
¡ýÇáÇáÒ»µã,Çå³ýϵͳÀ¬»ø¡ý
¿ª·¢: C++֪ʶ¿â Java֪ʶ¿â JavaScript Python PHP֪ʶ¿â È˹¤ÖÇÄÜ Çø¿éÁ´ ´óÊý¾Ý Òƶ¯¿ª·¢ ǶÈëʽ ¿ª·¢¹¤¾ß Êý¾Ý½á¹¹ÓëËã·¨ ¿ª·¢²âÊÔ ÓÎÏ·¿ª·¢ ÍøÂçЭÒé ϵͳÔËά
½Ì³Ì: HTML½Ì³Ì CSS½Ì³Ì JavaScript½Ì³Ì GoÓïÑÔ½Ì³Ì JQuery½Ì³Ì VUE½Ì³Ì VUE3½Ì³Ì Bootstrap½Ì³Ì SQLÊý¾Ý¿â½Ì³Ì CÓïÑÔ½Ì³Ì C++½Ì³Ì Java½Ì³Ì Python½Ì³Ì Python3½Ì³Ì C#½Ì³Ì
ÊýÂë: µçÄÔ ±Ê¼Ç±¾ ÏÔ¿¨ ÏÔʾÆ÷ ¹Ì̬ӲÅÌ Ó²ÅÌ ¶ú»ú ÊÖ»ú iphone vivo oppo СÃ× »ªÎª µ¥·´ ×°»ú ͼÀ­¶¡
 
   -> C++֪ʶ¿â -> CÓïÑÔ±ê×¼¿âÉî¶ÈÕûÀí -> ÕýÎÄÔĶÁ

[C++֪ʶ¿â]CÓïÑÔ±ê×¼¿âÉî¶ÈÕûÀí

ÒýÑÔ

CÓïÑÔ±ê×¼¿âÊÇÒ»×éÄÚÖõĺ¯Êý¡¢³£Á¿,±»¶¨ÒåÔÚ15¸öÍ·ÎļþÖÐ,ÌṩÁËCÓïÑÔÖÐ×î»ù´¡µÄ¹¦ÄÜ

stdio.h ¼´±ê×¼ÊäÈëÊä³ö,ͬʱº­¸ÇÁËÎļþ¶ÁдµÄÈ«²¿¹ý³Ì¡£

Ëùν±ê×¼ÊäÈëÊä³ö,Ö±¹ÛÒ»µã¾ÍÊǼüÅ̺ÍÏÔʾÆÁ:¼üÅ̽«±ê×¼ÊäÈë´«µÝ¸øÖÕ¶Ë,Öն˽«ÄÚÈÝ´òÓ¡ÔÚÏÔʾÆÁÉÏ¡£¹ØÓÚÕâÖÖ»ùÓÚ×Ö·û´®µÄÈË»ú½»»¥,stdio.hÖ÷ÒªÌṩÁËÁ½×麯Êý,Ò»×éÊÇgetºÍput,ÁíÒ»×éÊÇprintºÍscan¡£

²Ù×÷Ò»¸öÎļþµÄÁ÷³Ì´óÖÂΪ:´Ófopen´ò¿ªÎļþ,µ½fread, fwrite¶ÁдÎļþ,ÔÙµ½fflushÇ¿ÖÆдÈ뻺´æ,×îºófclose¹Ø±ÕÎļþ;ÈçÐ辫ȷ¶¨Î»ÎļþµÄ×Ö½ÚλÖÃ,¿Éͨ¹ýfseek»òfgetpos¡£

stdlib.h ¼´ÊÇstandard library,±ê×¼¿âÖÐÎÞ·¨¹éÈëÆäËûÀà±ðµÄͳͳ·Åµ½ÕâÀï,Ö÷Òª·ÖΪËĸö²¿·Ö:Äڴ桢ϵͳ¡¢×Ö·û´®×ªÊýÖµºÍÊýѧËã·¨¡£

string.h:Ìṩ×Ö·û´®µÄ²éѯ¡¢±È½Ï¡¢¸´ÖƵȹ¦ÄÜ

ctype.h:ÓÃÓÚÊý¾ÝÀàÐÍÅжÏ

math.h:Ìṩ×î»ù´¡µÄÊýѧÔËËã

ʱ¼äÓë»õ±Ò:C±ê×¼¿âÌṩÁËÕë¶Ô²»Í¬¹ú¼ÒµÄ±¾µØ»¯Í·º¯Êý,¾ßÌå±íÏÖÔÚʱ¼äºÍ»õ±ÒÉÏ¡£C±ê×¼¿â¶Ô²»Í¬µØÇøµÄʱ¼äºÍ»õ±ÒµÄ±í´ïÐÎʽ½øÐÐÁ˱¾µØ»¯µÄÃèÊö,·Ö±ð·â×°ÔÚtime.hºÍlocale.hÖС£

µ¥¹¦ÄÜ¿â Óкܶà¿âÊ®·Ö¼òµ¥,¹Êͳһ¹éÀൽµ¥Ò»¹¦ÄÜ¿âÏÂ,°üÀ¨

  • stdarg.h:¿É±ä²ÎÊýÖ§³Ö
  • assert.h:ÓÃÓÚ±¨´í
  • stddef.h:Ö¸ÕëÏà¼õ
  • setjmp.h:Ìøת

³£Á¿¿â Óеıê×¼¿âÖ»¶¨ÒåÁËһЩºê,µ¥²¢Î´ÉùÃ÷º¯Êý,¹Ê½«ÕâÀà¿âͳһ¹éÀൽ³£Á¿¿âÖС£

  • ϵͳ´íÎóÂëerrno.h
  • ÐźÅsignal.h
  • ¸¡µãÐÍÏÞÖÆÐÅÏ¢float.h
  • ÕûÐÍÏÞÖÆÐÅÏ¢limits.h

stdio.h

stdÊDZê×¼µÄ,io¼´ÊäÈëÊä³ö,ºÏÆðÀ´stdio¾ÍÊDZê×¼ÊäÈëÊä³ö¡£

³£Á¿ºÍÖ¸Õë

#define¹¦ÄܲÙ×÷ϵͳĬÈÏ
EOF (-1)Îļþ½áÊø·û
BUFSIZ 1024setbufº¯Êý»º³åÇø×Ö½ÚÊý__BUFSIZ__
FOPEN_MAX 20ϵͳ¿Éͬʱ´ò¿ªµÄÎļþÊýÁ¿__FOPEN_MAX__
FILENAME_MAX 1024ÎļþÃû×î´ó³¤¶È__FILENAME_MAX__
L_tmpnam FILENAME_MAXtmpnam´´½¨µÄÁÙʱÎļþÃûµÄ×î´ó³¤¶È__L_tmpnam__
TMP_MAX 26tmpnam¿ÉÉú³É×î¶à¶ÀÁ¢ÎļþÃû

stdio.hÖж¨ÒåÁËÈý¸öFILEÀàÐ͵ÄÖ¸Õë,

#define	stdin	(_REENT->_stdin)
#define	stdout	(_REENT->_stdout)
#define	stderr	(_REENT->_stderr)

ÆäÖÐ,_REENTÔÚreent.hÓÉ_impure_ptr¶¨Òå,¶ø_impure_ptrÔòΪ_reentµÄÖ¸Õë¡£

ÔÚ_reentÖж¨ÒåÁËÈý¸öFILEÐ͵ÄÖ¸Õë__FILE *_stdin, *_stdout, *_stderr;,·Ö±ð´ú±í±ê×¼ÊäÈë¡¢±ê×¼Êä³öºÍ±ê×¼´íÎó¡£

´ò¿ªÎļþ

fopenºÍfreopen¾ùΪCÓïÑÔ±ê×¼¿âstdio.hÖеĺ¯Êý,·Ö±ðÓÃÓÚ´ò¿ªºÍÖØдò¿ªÄ³¸östream,¶þÕß¾ù·µ»ØÒ»¸öFILEÖ¸Õë¡£

  • FILE *fopen(const char *filename, const char *mode)
  • FILE *freopen(const char *filename, const char *mode, FILE *stream)

ÆäÖÐfilenameΪÎļþ·¾¶,modeΪÎļþ´ò¿ªÄ£Ê½,freopenÖÐÊäÈëµÄµÄstreamΪÏÖ´æµÄÁ÷,freopen½«Ð´ò¿ªµÄÎļþ×¢ÈëstreamÖÐ,ͬʱ¹Ø±Õ¾ÉÎļþ¡£

ÆäÖÐmodeµÄÈ¡ÖµÈçÏÂ,µÚÒ»ÁÐΪ³£¹æģʽ,µÚ¶þÁÐΪ¶þ½øÖÆģʽ,ÔÚ¶þ½øÖÆģʽÏÂ,¶ÁÈ¡µÄÊǶþ½øÖÆÎļþ,ÆäËûÓë³£¹æģʽÏàͬ¡£

modeģʽ˵Ã÷
¡°r¡±¡°rb¡±Ö»¶Á´ò¿ªµÄÎļþ±ØÐë´æÔÚ¡£
¡°w¡±¡°wb¡±Ð´Èë´´½¨¿ÕÎļþ,ÈôÎļþÒÑ´æÔÚ,»áɾ³ýÔ­ÓÐÄÚÈÝ¡£
¡°a¡±¡°ab¡±×·¼ÓÏòÎļþĩβ׷¼ÓÊý¾Ý,ÈôÎļþ²»´æÔÚ,Ôò´´½¨Îļþ¡£
¡°r+¡±¡°rb+¡±¸üдò¿ªÒ»¸öÎļþ½øÐжÁд,¸ÃÎļþ±ØÐë´æÔÚ¡£
¡°w+¡±¡°wb+¡±¶Áд´´½¨Ò»¸öÓÃÓÚ¶ÁдµÄ¿ÕÎļþ¡£
¡°a+¡±¡°ab+¡±´ò¿ªÒ»¸öÓÃÓÚ¶ÁÈ¡ºÍ×·¼ÓµÄÎļþ

fopenºÍfreopenµÄ·µ»ØֵΪFILEÖ¸Õë,¸ÕºÃ¿ÉÒÔͨ¹ýstdio.hÖеÄclose½øÐйرա£

stdio.hÖж¨ÒåÁËÈý¸öµ¥²Îº¯ÊýÓÃÒÔµ÷¿ØÎļþµÄдÈë,ÆäÊäÈë¾ùΪFILE *stream,Èô³É¹¦Ôò·µ»Ø1,ʧ°ÜÔò·µ»Ø0¡£

·µ»ØÀàÐͺ¯Êý¹¦ÄÜ
intfclose¹Ø±Õstream,ˢлº³åÇø
intfflushË¢ÐÂstreamµÄÊä³ö»º³åÇø
intferror²âÊÔstreamµÄ´íÎó±êʶ·û

Èç¹ûÔÚûÓÐÍê³ÉдÈëµÄÇé¿öϵ÷ÓÃclose,¿ÉÄÜ»áÖÂʹÊý¾Ý¶ªÊ§,¹Êstdio.hÖÐÌṩÁËfflushº¯Êý,ÓÃÓÚÇ¿Öƽ«»º³åÇøµÄÄÚÈÝдÈëÎļþ¡£¶øfcloseÔò×ÛºÏÁ˶þÕߵŦÄÜ,ÏÈflush,ÔÙclose¡£

FILE½á¹¹Ìå

FILEÊÇCÓïÑÔ±ê×¼¿âstdio.hÖж¨ÒåµÄÒ»¸ö½á¹¹Ìå,ÓÃÓÚÊý¾Ý»º´æ,Ò»°ãдΪ

//stdio.h
typedef struct _iobuf
{
    char*  _ptr;        //ÎļþÊäÈëµÄÏÂÒ»¸öλÖÃ
    int    _cnt;        //µ±Ç°»º³åÇøµÄÏà¶ÔλÖÃ
    char*  _base;       //Îļþ³õʼλÖÃ
    int    _flag;       //Îļþ±êÖ¾
    int    _file;       //ÎļþÓÐЧÐÔ
    int    _charbuf;    //»º³åÇøÊÇ·ñ¿É¶ÁÈ¡
    int    _bufsiz;     //»º³åÇø×Ö½ÚÊý
    char*  _tmpfname;   //ÁÙʱÎļþÃû
} FILE;

ÆäÖÐ,_bufsizΪ»º³åÇø×Ö½ÚÊý,Ò»°ãÓɺêÀ´¶¨Òå

#define BUFSIZ 1024

ÁÙʱÎļþÃû_tmpfname¿Éͨ¹ýº¯Êýtmpnam½øÐÐÉèÖÃ,»òÕßͨ¹ýtmpfile´´½¨¶þ½øÖÆÎļþ¡£

ΪÁËÀí½âÕâЩ×ֶεĺ¬Òå,¿ÉÒÔдһ¸öСÀý×Ó

//test.c
#include<stdio.h>

//Õâ¸öº¯ÊýÓÃÀ´´òÓ¡FILEÄÚ²¿µÄ×Ö¶Î
void printFILE(FILE *fp){
    printf("fp->_ptr=%s\n",fp->_ptr);
    printf("fp->_cnt=%d\n",fp->_cnt);
    printf("fp->_base=%s\n",fp->_base);
    printf("fp->_flag=%d\n",fp->_flag);
    printf("fp->_file=%d\n",fp->_file);
    printf("fp->_charbuf=%d\n",fp->_charbuf);
    printf("fp->_bufsiz=%d\n",fp->_bufsiz);
    printf("fp->_tmpfname=%s\n",fp->_tmpfname);
    printf("-------------------------------------");
    printf("-------------------------------------\n");
}

int main(){
    FILE* fp = fopen("test.c","r"); //´ò¿ªtest.cÎļþ,¼´±¾Îļþ
    printFILE(fp);

    char buf[20];
    fread(buf,1,5,fp);      //¶ÁÈ¡fpÖеÄÊý¾Ý
    printFILE(fp);

    fclose(fp);             //¹Ø±Õfp
    printFILE(fp);
    return 0;
}

µÃµ½ÆäÊä³öÈçÏÂ,ΪÁ˱ãÓÚÔĶÁ,ÓÃ//ºÍ/**/¶ÔÊä³ö½øÐÐ×¢ÊÍ

>gcc test.c
>a.exe
fp->_ptr=(null)     //´ò¿ªÎļþºó,ÓÉÓÚδ×÷²Ù×÷,¹Ê¸ÃÖ¸ÕëΪ¿Õ
fp->_cnt=0          //µ±Ç°»º³åÇøÏà¶ÔλÖÃΪ0
fp->_base=(null)    //Îļþ³õʼλÖÃÒ²ÊÇÒ»¸ö¿ÕÖ¸Õë
fp->_flag=1         
fp->_file=3         
fp->_charbuf=0      //»º³åÇøÎļþ
fp->_bufsiz=0       //»º³åÇøÊÇ¿ÕµÄ
fp->_tmpfname=(null)   
--------------------------------------------------------------------------
// ÏÂÃæµÄÊä³öÊÇÔÚÖ´ÐÐfreadÖ®ºó,
// ÓÉÓÚ¶ÁÈ¡ÁË5¸ö×Ö½Ú,ËùÒÔÖ¸ÕëÌø¹ýÁË#incl
fp->_ptr=ude<stdio.h>

void printFILE(FILE *fp){
    /*
    ÕâÒ»¶Î½«test.cÖеÄÄÚÈÝÔ­·â²»¶¯µØ´òÓ¡Á˳öÀ´
    ÒòΪ̫³¤,ËùÒÔÊ¡ÂÔ²»Ð´ÁË
    */
    printFILE(fp);
    return 0;
}
LE(fp);
    return 0;
}

fp->_cnt=665        #µ±Ç°»º³åÇøµÄÏà¶ÔλÖÃÊÇ65
fp->_base=#include<stdio.h>     #Ö¸ÏòÎļþ³õʼλÖõÄÖ¸Õë

void printFILE(FILE *fp){
    /*
    ÕâÒ»¶Î½«test.cÖеÄÄÚÈÝÔ­·â²»¶¯µØ´òÓ¡Á˳öÀ´
    ÒòΪ̫³¤,ËùÒÔÊ¡ÂÔ²»Ð´ÁË
    */
    printFILE(fp);
    return 0;
}
LE(fp);
    return 0;
}

fp->_flag=9
fp->_file=3
fp->_charbuf=0
fp->_bufsiz=4096        //»º³åÇø³ß´çΪ4096
fp->_tmpfname=(null)    //²¢Ã»ÓÐÁÙʱÃû×Ö
--------------------------------------------------------------------------
// ¹Ø±ÕÎļþºó,Ò»ÇÐÓÖ±äµÃδ֪,µ«»º³åÇø³ß´ç²¢Î´±ä»¯
fp->_ptr=(null)
fp->_cnt=0
fp->_base=(null)
fp->_flag=0
fp->_file=3
fp->_charbuf=0
fp->_bufsiz=4096
fp->_tmpfname=(null)
--------------------------------------------------------------------------

ÔÚÉÏÃæµÄÊä³öÖÐ,_flagÖµÔÚ´ò¿ªÎļþºóΪ1,¶ÁÈ¡Îļþºó±äΪ9,¹Ø±ÕÎļþºó±äΪ0.

_fileÔòһֱΪ3¡£

ÔÚstdio.hÖж¨ÒåÁËһϵÁг£Á¿ÓÃÓÚÃèÊöÎļþÁ÷µÄ״̬

#define __SLBF  0x0001   /* Ðлº³å */
#define __SNBF  0x0002   /* ÎÞ»º³å */
#define __SRD   0x0004   /* ¿É¶Á */
#define __SWR   0x0008   /* ¿Éд */
#define __SRW   0x0010   /* ¿É¶Áд */
#define __SEOF  0x0020   /* ·¢ÏÖ EOF */
#define __SERR  0x0040   /* ·¢ÏÖ error */
#define __SMBF  0x0080   /* _bufÀ´×ÔÄÚ´æ(malloc) */
#define __SAPP  0x0100   /* fdopen()ed in append mode */
#define __SSTR  0x0200   /* ÊÇÒ»¸ösprintf/snprintf×Ö·û´® */
#define __SOPT  0x0400   /* ½øÐÐfseek()ÓÅ»¯ */
#define __SNPT  0x0800   /* ²»½øÐÐfseek()ÓÅ»¯ */
#define __SOFF  0x1000   /* set iff _offset is in fact correct */
#define __SMOD  0x2000   /* true => fgetln modified _p text */
#define __SALC  0x4000   /* ¶¯Ì¬·ÖÅä×Ö·û´®ÄÚ´æ*/
#define __SIGN  0x8000   /* ÔÚ_fwalkÊǺöÂÔ±¾Îļþ*/

_flagµÄֵΪ1,±íʾÆôÓÃÐлº³å;Ϊ9,ÔòÊÇ__SLBF | __SWR,˵Ã÷¿Éд¡£

Îļþ¶ÁдºÍ¶¨Î»

ÔÚstdio.hÖж¨ÒåÁ˶Á¡¢Ð´»¹ÓвéÕҵĺ¯Êý,ÆäÖÐfreadÓÃÓÚ½«ÎļþÖеÄÊý¾ÝдÈëÄÚ´æ;fwrite½«ÄÚ´æÖеÄÊý¾ÝдÈëÎļþ;fseekÔò²Ù×÷ÎļþÖ¸Õë,ʹ֮ƫÒÆ,´Ó¶ø¿ÉÒÔ¸ü¼ÓÁé»îµØ¶ÁÈ¡¡£

  • ¶Á:size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream)
  • д:size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream)
  • ÒÆ:int fseek(FILE *stream, long int offset, int whence)

ÆäÖÐ,ptrΪָÏòij¸öÄÚ´æ¿éµÄÖ¸Õë;streamΪÎļþµÄÊý¾ÝÁ÷;nmembΪԪËظöÊý,sizeΪÿ¸öÔªËصÄ×Ö½ÚÊý;whenceΪÌí¼ÓÆ«ÒƵÄλÖÃ,offsetΪÏà¶ÔÓÚwhenceµÄÆ«ÒÆÁ¿¡£

ÔÚstdio.hÖÐΪwhence¶¨ÒåÁ˺ê,Æ京ÒåÈçÏÂ

#define SEEK_SET 0´Ó0¿ªÊ¼
#define SEEK_CUR 1´Óµ±Ç°Î»ÖÿªÊ¼
#define SEEK_END 2´ÓEOF¿ªÊ¼

¶ÁдÏà¶ÔÀ´Ëµ±È½ÏÖ±¹Û,½ÓÏÂÀ´Ö÷Òª²âÊÔÒ»ÏÂfseek,˵Ã÷¾ùÔÚ×¢ÊÍÖС£

//test.c
#include<stdio.h>
void printChar(char *buffer, int len){
	for(int i = 1; i < len; i++)
		printf("%c",buffer[i-1]);
	printf("\n-------------------------\n");
}
int main(){
    FILE* fp = fopen("test.c","r"); //´ò¿ªtest.cÎļþ,¼´±¾Îļþ

    char buf[20];
    fread(buf,1,20,fp);          //¶ÁÈ¡fpÖеÄÊý¾Ý
    printf("printf the first 20 bytes:");
    printChar(buf,20);

    fseek(fp, 24, SEEK_CUR);    //´Óµ±Ç°Î»ÖÿªÊ¼Æ«ÒÆ
    fread(buf,1,20,fp);
    printf("fseek 24 from now:");
    printChar(buf,20);

    fseek(fp, 24, SEEK_SET);    //´Ó0¿ªÊ¼Æ«ÒÆ
    fread(buf,1,20,fp);
    printf("fseek 24 from 0:");
    printChar(buf,20);

    fseek(fp, -20, SEEK_END);    //´Ó½áÊøλÖÃÏòÇ°Æ«ÒÆ
    fread(buf,1,20,fp);
    printf("fseek 20 from END:"); 
    printChar(buf,20);

    fclose(fp);         //¹Ø±Õfp
    return 0;
}

Êä³ö½á¹ûΪ

>gcc test.c

E:\Documents\00\1217>a.exe
printf the first 20 bytes://test.c
#include<s
-------------------------
fseek 24 from now:har *buffer, int le
-------------------------
fseek 24 from 0:.h>
void printChar(
-------------------------
fseek 20 from END:
    return 0;
}
r(
-------------------------

Îļþ¶¨Î»

³ýÁËfseek¿ÉÒÔ¶ÔÎļþÖ¸Õë½øÐÐÒƶ¯Ö®Íâ,fsetpos¿ÉÒÔÖ±½Ó¶ÔÎļþÖ¸Õë½øÐж¨Î»¡£ÏàÓ¦µØ,fgetpos¿ÉÒÔ»ñÈ¡ÎļþÖ¸ÕëµÄλÖÃ,¶þÕßÉùÃ÷Ϊ:

  • int fgetpos(FILE *stream, fpos_t *pos)
  • int fsetpos(FILE *stream, const fpos_t *pos)

¶þÕߵķµ»ØÖµ¾ùΪÉèÖÃÖ®ºóµÄλÖÃ,¹ØÓÚÊäÈë²ÎÊý,FILE *streamÊÇ´ó¼Ò·Ç³£ÊìϤµÄÎļþÁ÷,¶øfpos_tÊÇÒ»¸ö½á¹¹Ìå,´ú±íÏà¶ÔλÖÃ,ͨ³£¶¨ÒåΪ

typedef struct
{
    unsigned long _off;
}fpos_t;

½ÓÏÂÀ´×öÒ»¸ö¼òµ¥µÄ²âÊÔ

//pos.c
#include <string.h>
#include <stdio.h>
int main(void)
{
    fpos_t pos;
    FILE* fp = fopen("pos.c", "r"); //´ò¿ªpos.cÎļþ,¼´±¾Îļþ
    fgetpos(fp, &pos);              //»ñÈ¡Ö¸ÕëλÖÃ
    printf("file pointer : %ld\n", pos);
    
    fseek(fp,10,0);         // Òƶ¯Ö¸ÕëλÖÃ
    fgetpos(fp, &pos);      // »ñÈ¡Ö¸ÕëλÖò¢´æÈë&posËùÖ¸ÏòµÄ¶ÔÏó
    printf("file pointer : %ld\n", pos);
    fclose(fp);
    return 0;
}

½á¹ûÈçÏÂ,¿É¼ûgetposºÍfseekµÄµ¥Î»ÊÇÒ»ÖµÄ,fseekÒƶ¯ÁË10¸ö×Ö½Ú,ÔòfgetposÒ²»ñÈ¡ÁËλÖÃ10.

>gcc pos.c
>a.exe
file pointer : 0
file pointer : 10

½áºÏfgetposºÍfsetpos,¿ÉÍê³ÉÀàËÆfseekµÄ²Ù×÷

//setpos.c
#include <string.h>
#include <stdio.h>
int main(void)
{
    fpos_t pos;
    FILE* fp = fopen("pos.c", "r");   //´ò¿ªpos.cÎļþ,¼´±¾Îļþ
    printf("file pointer : %ld\n", fgetpos(fp, &pos));
    
    pos += 10;
    fsetpos(fp, &pos);      //ÉèÖÃÖ¸ÕëλÖÃ
    printf("file pointer : %ld\n", fgetpos(fp, &pos));
    fclose(fp);
    return 0;
}

²âÊÔ½á¹ûΪ

>gcc setpos.c
>a.exe
file pointer : 0
file pointer : 10

ÎļþºÍ·¾¶µÄÆäËû²Ù×÷

Á÷¿ØÖÆ

ÊäÈëΪFILE *streamµÄµ¥²Îº¯Êý,EOFΪÎļþ½áÊø±êʶ·û¡£

·µ»ØÀàÐ͹¦ÄÜ
voidclearerrÇå³ýstreamµÄÎļþ½áÊøºÍ´íÎó±êʶ·û
intfeof·µ»ØstreamµÄÎļþ½áÊø±êʶ·û,ÈôδÉèÖÃ,Ôò·µ»Ø0
long intftell·µ»ØstreamµÄÎļþλÖÃ,Èç¹û·¢Éú´íÎó,Ôò·µ»Ø-1L,È«¾Ö±äÁ¿errno±»ÉèÖÃΪһ¸öÕýÖµ¡£
voidrewindÉèÖÃÎļþλÖÃΪstreamµÄ¿ªÍ·
intfgetc
getc
´Óstream»ñÈ¡ÏÂÒ»¸ö×Ö·û,²¢°ÑλÖñêʶ·ûÍùÇ°Òƶ¯

»º´æ

ÔÚ´ò¿ªÎļþºó»¹Ã»ÓÐ×öÆäËû²Ù×÷µÄʱºò,¿ÉÒÔͨ¹ýssetvbufÀ´ÉèÖûº³å¸ñʽ,ÆäÉùÃ÷Ϊ

int setvbuf(FILE *stream, char *buffer, int mode, size_t size)

ÆäÖÐstreamΪÎļþÁ÷;bufferΪ·ÖÅä¸øÓû§µÄ»º³å;sizeΪ»º³åµÄ×Ö½ÚÊý;modeΪ»º³åģʽ,ÓÐÈýÖÖ

ºêÖµÀà±ð˵Ã÷
_IOFBF0È«»º³åÊä³öʱ,Êý¾ÝÔÚ»º³åÌîÂúʱ±»Ò»´ÎÐÔдÈë
ÊäÈëʱ,»º³åÔÚÇëÇóÊäÈëÇÒ»º³åΪ¿Õʱ±»Ìî³ä¡£
_IOLBF1Ðлº³åÊä³öʱ,ÔÚ»»Ð䦻ò»º³åÌîÂúʱдÈëÊý¾Ý
ÊäÈëʱ,»º³åÖÁÏÂÒ»¸ö»»Ðзû
_IONBF2ÎÞ»º³å²»Ê¹Óûº³å¡£I/O²Ù×÷¼´Ê±Ð´Èë,ºöÂÔbufferºÍsize

setbufÊÇsetvbufµÄÒ»¸öÌØÀý,ÆäÖÐmodeΪ_IONBFsizeΪBUFSIZ¡£

·¾¶²Ù×÷

stdio.h»¹ÌṩÁËÁ½¸ö²Ù×÷ÎļþµÄº¯Êý,·Ö±ðÊÇɾ³ýÎļþremoveºÍÖØÃüÃûÎļþrename,ÆäÉùÃ÷·Ö±ðΪ:

  • int remove(const char *filename)
  • int rename(const char *old_filename, const char *new_filename)

getºÍput

getºÍputÓл¥Îª·´º¯ÊýµÄ¸Ð¾õ,ÀýÈçgetchar()´Ó±ê×¼ÊäÈëstdin»ñÈ¡Ò»¸ö×Ö·û,¶øputchar(int c)½«×Ö·ûcË͵½±ê×¼Êä³ö¡£

ÀýÈç

#include <stdio.h>
int main ()
{
   char ch;
   printf("getchar: ");
   ch = getchar();
   printf("putchar: ");
   putchar(ch);
   return 0;
}

²âÊÔ½á¹ûΪ

>gcc gets.c
>a.exe
getchar: a
putchar: a

ΪÁ˱ãÓÚ¶Ô±ÈÔĶÁ,ÏÂÃæÁî

#define FS FILE *stream
#define IC int char
#define CS char *str
#define CCS const char *str

ÔòÓëgetºÍputÓйصĺ¯ÊýÈçϱíËùʾ

getfgetputfput
getchar()putchar(IC)
getc(FS)fgetc(FS)putc(IC, FS)fputc(IC, FS)
gets(CS)fgets(CS, int n, FS)puts(CCS)fputs(CCS, FS)
ungetc(IC, FS)

ÆäÖÐ,³ýfgetsºÍgetsµÄ·µ»ØֵΪ×Ö·ûÖ¸Õë,ÆäÓà¾ùΪÕûÐÍ,getchar()Ò²»á½«ÊäÈëµÄ×Ö·ûתΪÕûÐÍ¡£

ËùÓеÄgetºÍputº¯Êý¾ùÓÃÓÚ×Ö·ûµÄÊäÈëÊä³ö,ºó׺c±íʾ´ÓÎļþÊäÈë»òÊä³öµ½Îļþ,ûÓÐcÔò±íʾ»ùÓÚ±ê×¼ÊäÈëÊä³öÁ÷¡£Ç°×ºf±íʾÊÇ·ñÓɺêÀ´ÊµÏÖ,ÀýÈçgetcͨ³£ÓɺêÀ´ÊµÏÖÇÒ¾­¹ý¸ß¶ÈÓÅ»¯,¹Ê³£×÷ΪÊ×Ñ¡,µ«Ä¿Ç°À´ËµÓëfgetcÔÚËÙ¶ÈÏà²îÎÞ¼¸¡£

ungetc°ÑÒ»¸öÎÞ·ûºÅ×Ö·ûÍÆÈëµ½Ö¸¶¨µÄÁ÷streamÖÐ,ÒÔ±ã½ÓÏÂÀ´±»¶ÁÈ¡¡£

½ÓÏÂÀ´×öһЩ¼òµ¥µÄʾÀý

//fget.c
#include <stdio.h>
 
int main ()
{
    FILE *fp;
 
    fp = fopen("file.txt", "w+");
    //½«×Ö·ûÖðһдÈëÎļþ
    for(int ch = 50; ch <= 100; ch++)
        fputc(ch, fp);
    fclose(fp);

    //¶ÁÈ¡¸Õ¸ÕдÈëµÄÎļþ
    fp = fopen("file.txt","r");
    while(!feof(fp))
        printf("%c",getc(fp));
    
    fclose(fp);
    return 0;
}

²âÊÔΪ

>gcc fget.c
>a.exe
23456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdÿ

ÐèҪעÒâµÄÊÇ,C11±ê×¼ÖÐÒƳýÁËgetsº¯Êý,´úÖ®ÒÔgets_s,Çø±ðÔÚÓÚºóÕ߶ÔÊäÈë×Ö·û¸öÊý½øÐÐÁËÏÞÖÆ¡£È»¶ø,ËäÈ»C11ÒѾ­³öÁË10ÄêÁË,µ«´æÔڸв»ÊǺܸߵÄÑù×Ó¡£

printf

printfÊǾø´ó¶àÊýÈ˽Ӵ¥µÄµÚÒ»¸öCÓïÑÔº¯Êý,µ«¾ø´ó¶àÊýÈ˶ÔprintfµÄÈÏʶҲ¾Íµ½ÁËhello worldΪֹÁË,´ó²¿·ÖÈËÉõÖÁ¿´²»¶®Õâ¸öº¯ÊýµÄÉùÃ÷:

int printf(const char *format, ...)

¹Ø¼üÊÇ×Ö·û´®¸ñʽ±È½Ï¸´ÔÓ,¿ÉÒÔ±íʾΪ%format[flags][m.n]specifier

ÀýÈç

#include<stdio.h>
#define PI 3.14159265358979323846264338327950288

int main(){
	printf("%6.2f",PI);
	return 0;
}

ÆäÊä³öΪ

E:\Documents\00\1110>a.exe
  3.14

ÆäÖÐ,%6.2f¿É·ÖΪ3²¿·Ö,6±íʾÊä³öÁù¸ö×Ö·û;.2±íʾ±£Áô2λСÊý;f±íʾÊä³öµÄÊǸ¡µãÊý¡£ÓÉÓÚPIÔÚ±£Áô2λСÊýÖ®ºó,Ö»ÓÐ4¸ö×Ö·û,ËùÒÔÔÚ3.14×ó²à²¹ÉÏÁË¿Õ¸ñ¡£

¸÷²ÎÊýµÄÈ¡ÖµÓ뺬Òå¿É¼ûÓÚϱí,Èç¹û¾õµÃ²»¹»Ö±¹Û,¿ÉÖ±½ÓÌøµ½²âÊÔ²¿·Ö¡£

specifier¸ñʽ»¯·ûºÅ
ÕûÊý¡¼%d¡½¡¼%i¡½¡¼ÎÞ·ûºÅ%u¡½
ÎÞ·ûºÅ²»Í¬½øÖÆ¡¼°Ë½øÖÆ%o¡½¡¼Ê®Áù½øÖÆ%x¡½¡¼´óдʮÁù½øÖÆ%X¡½
¸¡µãÊý¡¼%f¡½¡¼¿Æѧ¼ÆÊý·¨%e, %E¡½¡¼%gÓÃ%fºÍ%eÖн϶̵ÄÄǸö¡½
×Ö·ûºÍ×Ö·û´®¡¼×Ö·û%c¡½¡¼×Ö·û´®%s¡½
Ö¸Õë%pÊä³öÖ¸ÕëµØÖ·

ÆäÖÐ,

  • i, d, o, u, x, X¿Éͨ¹ýhÐÞÊÎ,´Ó¶øÊä³ö¶ÌÕûÐÍ;ͨ¹ýlÐÞÊÎ,´Ó¶øÊä³ö³¤ÕûÐÍ
  • e, E, f, g, G¿Éͨ¹ýlÐÞÊÎ,±íʾ³¤Ë«¾«¶ÈÐÍ,µ«ÔÚWindowsÏ¿ÉÄÜûʲô²î±ð¡£
flags±êʶÃèÊö
-×ó¶ÔÆë,ĬÈÏÊÇÓÒ¶ÔÆë
+Ç¿ÖÆÏÔʾÕý¸ººÅ
#Óë o¡¢x¡¢XÁ¬ÓÃʱ,·ÇÁãֵǰÃæ·Ö±ðÏÔʾ0¡¢0x »ò 0X
Óëe¡¢E¡¢fÁ¬ÓÃʱ,Ç¿ÖÆ°üº¬Ð¡Êýµã
Óëg¡¢GÁ¬ÓÃʱ,½á¹ûÓëe¡¢EʱÏàͬ,µ«²»»áÒƳýβ²¿µÄÁã
0ÔÚÊý×Ö×ó±ß²¹³ä0

m.nÖÐ,m±íʾÊä³ö×Ö·ûµÄ×îСÊýÄ¿,Èô×Ö·û³¤¶È¶ÌÓÚm,ÔòÓÿոñÌî³ä;n±íʾСÊýµãºóµÄλÊý¡£

ÏÂÃæËæ»ú³éѡһЩ±í´ïʽ,ÁгöÆäÊä³ö½á¹û,ÊÂÏÈÉùÃ÷һЩ±äÁ¿

#define PI 3.14159265358979323846264338327950288
#define IPI 31415926
int main(){
    float fPI = PI;
    double dPI = PI;
    printf("%.10f",fPI);
    return 0;
}

¸¡µãÐͲâÊÔ

printfÊä³ö˵Ã÷
"%.10f",fPI3.1415927410floatÒ»°ãÖ»ÓÐ6λ¾«¶È
"%.10f",dPI3.1415926536double¿É±£Ö¤15λ¾«¶È
"%010.5f",dPI0003.141595λ¾«¶È,10¸ö×Ö·û,×ó²à²¹0
"%015.5E",dPI*1e50003.14159E+005widthÖ¸×Ö·û¸öÊý
"%#010.0f",dPI*1e5000314159.#Ç¿ÖÆÊä³öСÊýµã
"%+f",dPI+3.141593+Ç¿ÖÆÊä³öÕýºÅ
"%.2G",dPI3.1
"%.2G",dPI*1e103.1E+010´ËʱÏÔÈ»Eģʽ¸ü¶Ì
"%010.2G\n%010.4G",dPI00000003.1
000003.142
ĬÈÏÓÒ¶ÔÆë
"%-010.2G\n%-010.4G",dPI3.1
3.142
-ģʽÏÂ×ó¶ÔÆë,ËùÒÔ0ûÁË

ÕûÐͲâÊÔ

printfÊä³ö˵Ã÷
%u,IPI31415926×÷ΪÎÞ·ûºÅÕûÐÍÊä³ö
%+d,IPI31415926+ģʽǿÖÆÏÔʾÕýºÅ
%o,IPI167657166Êä³öΪ8½øÖÆ
%x,IPI1df5e76Êä³öΪʮÁù½øÖÆ
%#X,IPI0X1DF5E76#ģʽÏÂÏÔʾ0X

ÔÚstdioÖÐ,¶¨ÒåÁËһϵÁÐprintfº¯ÊýºÍscanfº¯Êý,ͨ¹ýÔÚÇ°ÃæÌí¼ÓÒ»¸ö×ÖĸÀ´±íʾ²»Í¬µÄÐÐΪ:

Êä³öλÖÃʹÓòÎÊýÁбí¶ÁÈ¡ÊäÈë
±ê×¼Êä³ö(ÆÁÄ»)printfvprintfscanf
streamfprintfvfprintffscanf
×Ö·û´®sprintfvsprintfsscanf

ΪÁ˱ãÓÚÔĶÁ,ÏÂÃæĬÈÏ

#define FORMAT const char *format

Æäprintf×庯ÊýÉùÃ÷·Ö±ðΪ

  • int fprintf(FILE *stream, FORMAT, ...)
  • int sprintf(char *str, FORMAT, ...)
  • int vfprintf(FILE *stream, FORMAT, va_list arg)
  • int vprintf(FORMAT, va_list arg)
  • int vsprintf(char *str, FORMAT, va_list arg)
  • int snprintf(char *str, size_t size, FORMAT, ...)

ÆäÖÐsnprintfÖеÄsize±íʾҪдÈë×Ö·ûµÄ×î´óÊýÄ¿,³¬¹ýsize»á±»½Ø¶Ï¡£

scanf×庯ÊýÉùÃ÷Ϊ

  • int fscanf(FILE *stream, FORMAT, ...)
  • int scanf(FORMAT, ...)
  • int sscanf(cSTR, FORMAT, ...)

stdlib.h

ÄÚ´æ·ÖÅä

×î¼òµ¥µÄÄÚ´æ·ÖÅ亯ÊýΪvoid *malloc(size_t size),ÊäÈëÄÚ´æ×Ö½ÚÊý,·µ»ØÖ¸ÏòÕâƪÄÚ´æÇøÓòµÄÖ¸Õë,Èç¹û´´½¨Ê§°Ü,Ôò·µ»ØNULL¡£

void *calloc(size_t nitems, size_t size)ÔÚmallocµÄ»ù´¡É϶ÔÄÚ´æ¿Õ¼ä½øÐÐÁ˳õʼ»¯,ÁîËùÓÐ×Ö½Ú¾ùÖÃÁã;´ËÍâ,»¹¿ÉÒÔ·ÖÅä¶à¿éÄÚ´æ,nitems¾Í±íʾËù·ÖÅäµÄÄÚ´æ¿éÊý¡£

void *realloc(void *ptr, size_t size)ÓÃÓÚÖØзÖÅäÄÚ´æ,ÆäÖÐptrÊÇÒ»¸öÖ¸ÏòÒѾ­±»·ÖÅäµÄÄÚ´æµÄÖ¸Õë¡£

×îºó,ͨ¹ýfree¿ÉÒÔÊÍ·ÅÓÉmalloc, calloc, reallocµÈ·ÖÅäµÄ¿Õ¼ä¡£

ϵͳ½»»¥

Ò»°ãÇé¿öÏÂ,ÔÚCÓïÑÔÖÐÍ˳öÒ»¸ö³ÌÐòÓÃreturn,Èç¹ûÔÚmainº¯ÊýÖÐ,returnÔÚÇåÀí¾Ö²¿¶ÔÏóÖ®ºó,»áµ÷ÓÃexitº¯Êý¡£

ºÍreturnÏà±È,exit²¢²»»áÏú»Ù¾Ö²¿¶ÔÏó,¶øÊÇ»áÏú»ÙËùÓо²Ì¬ÓëÈ«¾Ö¶ÔÏó¡¢Çå¿Õ»º³åÇø,¹Ø±ÕIOͨµÀ¡£ÖÕֹǰÔò»áµ÷ÓÃatexit()Ëù¶¨ÒåµÄº¯Êý¡£

atexitÒ²ÔÚstdlib.hÖÐ,ÆäÉùÃ÷ʽΪ

int atexit(void (*func)(void))

µ±³ÌÐòÖÐֹʱ,¾Í»áµ÷Óú¯ÊýÖ¸Õëfunc¡£

//atexit.c
#include <stdio.h>
#include <stdlib.h>

void funcA (){
   printf("call from atexit\n");
}

int main (){
   atexit(funcA);   //½«funcA×¢²áΪÖÐÖ¹º¯Êý
   printf("exiting...\n");
   return 0;
}

²âÊÔ½á¹ûÈçÏÂ

>gcc atexit.c
>a.exe
exiting...
call from atexit

Èç¹ûÏ£Íûʲô¶¼²»×ö¾ÍÍ˳ö³ÌÐò,¿ÉÒÔʹÓÃabort(),½«abort();²åÈëµ½return 0Ç°Ãæ,ÔòÆäÊä³ö½á¹ûÈçÏÂ,²¢²»»áµ÷ÓÃfuncA¡£

>a.exe
exiting...

systemº¯Êý

system,¹ËÃû˼Òå,¾ÍÊǵ÷ÓÃϵͳÃüÁîÐÐ,ÆäÊäÈëΪ×Ö·û´®,È»ºó°ÑÕâ¸ö×Ö·û´®Êä³ö¸øÃüÁîÐÐ,ÈÃÃüÁîÐÐÖ´ÐС£

ΪÁ˲âÊÔÆäÌØÐÔ,¿ÉÒÔ×öÒ»¸öС³ÌÐò

//system.c
#include<stdlib.h>
#include<stdio.h>
#include<string.h>

int main(){
	char cmd[100];
	while(1){
		printf("input code: ");
		gets(cmd);
		if(strcmp(cmd,"exit")==0)
			break;  //µ±ÊäÈëexitʱÍ˳ö
		system(cmd);
	}
	return 0;
}

È»ºó¿ªÊ¼

>gcc system.c
>a.exe
input code: asdfasdf
'asdfasdf' ²»ÊÇÄÚ²¿»òÍⲿÃüÁî,Ò²²»ÊÇ¿ÉÔËÐеijÌÐò
»òÅú´¦ÀíÎļþ¡£
input code: date
µ±Ç°ÈÕÆÚ: 2021/12/19 ÖÜÈÕ
ÊäÈëÐÂÈÕÆÚ: (ÄêÔÂÈÕ)
input code: date
µ±Ç°ÈÕÆÚ: 2021/12/19 ÖÜÈÕ
ÊäÈëÐÂÈÕÆÚ: (ÄêÔÂÈÕ)
input code: HELP
ÓйØij¸öÃüÁîµÄÏêϸÐÅÏ¢,Çë¼üÈë HELP ÃüÁîÃû
ASSOC          ÏÔʾ»òÐÞ¸ÄÎļþÀ©Õ¹Ãû¹ØÁª¡£
ATTRIB         ÏÔʾ»ò¸ü¸ÄÎļþÊôÐÔ¡£
BREAK          ÉèÖûòÇå³ýÀ©Õ¹Ê½ CTRL+C ¼ì²é¡£
BCDEDIT        ÉèÖÃÆô¶¯Êý¾Ý¿âÖеÄÊôÐÔÒÔ¿ØÖÆÆô¶¯¼ÓÔØ¡£
# ÓÉÓÚÌ«³¤,ÇÒºÍÃüÁîÐÐÖÐÊäÈëHELPµÄ½á¹ûÊÇÒ»ÑùµÄ,ËùÒÔÕâÀï¾ÍÊ¡ÂÔÁË
Óйع¤¾ßµÄÏêϸÐÅÏ¢,Çë²ÎÔÄÁª»ú°ïÖúÖеÄÃüÁîÐвο¼¡£
input code: exit        #Í˳ö

ͨ¹ýsystem,¿ÉÒÔ×öÒ»¸öÔöÇ¿°æµÄÃüÁîÐС£

¶ø³ýÁËÕâЩÖÕ¶ËÌṩµÄÃüÁîÖ®Íâ,¿ÉÄÜ»¹ÐèҪһЩ×Ô¶¨ÒåµÄÓï¾ä,ÕâЩÓï¾ä¶¼±»´æ·ÅÔÚ»·¾³±äÁ¿ÖÐ,getenv¿ÉÒÔ»ñÈ¡Ãû×Ö¶ÔÓ¦µÄ»·¾³±äÁ¿

char *getenv(const char *name)

ÀýÈç

#include <stdio.h>
#include <stdlib.h>

int main ()
{
   printf("PATH : %s\n", getenv("PATH"));
   return 0;
}

ÆäÔËÐнá¹ûΪ

E:\Documents\00\1220>a.exe
PATH : C:\Program Files\Microsoft\jdk-11.0.12.7-hotspot\bin;C:\Python310\Scripts\;C:\Python310\;C:\Program Files\Common Files\Oracle\Java\javapath;D:\CS\ImageMagick;(x86)\Common Files\Intel\Shared 
....//ÒòΪ̫¶àËùÒÔºóÃæµÄ¾Í²»Ð´ÁË

×Ö·û´®º¯Êý

stdlibÖж¨ÒåÁË6¸ö½«×Ö·û´®×ªÎªÊýÖµµÄº¯Êý,·Ö±ðÓÃÓÚ¸¡µã¡¢ÕûÐÍ¡¢³¤ÕûÐͺÍÎÞ·ûºÅ³¤ÕûÐÍ,ΪÁËÊéдÉϵıã½Ý,ÏÂÎÄÖÐÁî

#define cSTR const char *str
#define END char **endptr

ÆäÖÐ,strΪһ¸ö×Ö·û´®,endptrÔòΪ×Ö·û´®Ö¸Õë,Ôòstdlib.hÖеÄ×Ö·û´®×ª»»º¯ÊýÈçϱíËùʾ

·µ»ØÖµÀàÐͼòµ¥¸ß¼¶
doubleatof(cSTR)strtod(cSTR, END)
intatoi(cSTR)
long intatol(cSTR)strtol(cSTR, END, int base)
unsigned long intstrtoul(cSTR, END, int base)

ÆäÖÐ,Èôendptr²»Îª¿Õ,Ôò»á±£´æת»»ÊýÖµÖ®ºóµÄÖ¸ÕëλÖÃ;base½éÓÚ2ºÍ36(°üº¬)Ö®¼ä,±íʾת»»ÕûÐ͵ĻùÊý¡£

´ËÍâ,stdlibÖл¹ÓÐ4¸öÓÃÓÚ²»Í¬¿í¶ÈµÄ×Ö·ûÊý×éÖ®¼äµÄת»¯º¯Êý,Ö÷ÒªÊÇcharÀàÐͺÍwchar_tÖ®¼äµÄת»¯¡£

ÔÚC++ÖÐ,³ýÁËchar×÷Ϊ×Ö·ûÀàÐ͵ı£Áô×ÖÖ®Íâ,»¹ÓÐÈý¸ö²»Í¬¿í¶ÈµÄ×Ö·ûÀàÐÍ×÷Ϊ±í´ïʽ:wchar_t, char16_t, char32_t;µ½ÁËC++11,ÓÖÐÂÔöÁËchar16_tºÍchar32_t¡£

ÔÚCÓïÑÔÖÐ,¾¡¹ÜÖ»ÓÐÒ»¸öcharÊDZ£Áô×Ö,µ¥²¢²»·Á°­¶¨ÒåÆäËûÊý¾ÝÀàÐÍ,wchar_t±»¶¨ÒåÔÚstddef.hÖÐ,±¾ÖÊÉÏÊÇÒ»¸öint¡£×Ö·û´®ºÍwchar_tÖ®¼äµÄת»»º¯Êý°üÀ¨

  • size_t mbstowcs(wchar_t *pwcs, cSTR, size_t n):strתΪpwcs
  • size_t wcstombs(char *str, const wchar_t *pwcs, size_t n):pwcsתΪstr
  • int wctomb(char *str, wchar_t wchar):wcharתΪstr
  • int mbtowc(whcar_t *pwc, cSTR, size_t n):strתΪpwc

´ËÍâ,stdlib.hÖл¹¶¨ÒåÁËÒ»¸ö¼ÆËã×Ö·û´®³¤¶ÈµÄº¯Êýmblen,ºÍstring.hÖеÄstrlenµÄÇø±ðÔÚÓÚ,mblenÖжàÁËÒ»¸ö×î´ó×Ö½ÚÊýµÄ²ÎÊýn

int mblen(cSTR, size_t n)

Êýѧº¯ÊýºÍËã·¨

stdlibÖзâ×°ÁËËĸöÓÃÓÚÕûÐÍ»ò³¤ÕûÐ͵ÄÊýѧº¯Êý,°üÀ¨Á½¸ö¾ø¶ÔÖµº¯ÊýabsºÍlabs,·Ö±ðÓÃÓÚÕûÐͺͳ¤ÕûÐÍ;Á½¸ö³ý·¨divºÍldiv,Ò²ÊÇ·Ö±ðÓÃÓÚÕûÐͺͳ¤ÕûÐÍ¡£

´ËÍâ,»¹ÓÐÒ»¸öËæ»úÊýÉú³ÉÆ÷rand(),½«»áÉú³ÉÒ»¸ö·¶Î§ÔÚ 0 µ½ RAND_MAX Ö®¼äµÄαËæ»úÊý¡£ÈôÏëÖ¸¶¨Ëæ»úÊýÖÖ×Ó,¿ÉʹÓú¯Êýsrand(unsigned int seed)¡£

stdlibÖл¹ÓÐÁ½¸ö»ù±¾µÄ²éÕÒºÍÅÅÐòº¯Êý,·Ö±ðÊǶþ·Ö²éÕÒbsearch¡¢Î±¿ìÅÅqsort¡£

ÅÅÐò

stdlib.hÖеÄÅÅÐòº¯ÊýΪ

void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void*))

ÆäÖÐ,

  • baseΪָÏòÊý×éµÚÒ»¸öÔªËصÄÖ¸Õë
  • nitemsΪ´ýÅÅÐòÊý×éÖÐÔªËظöÊý
  • sizeΪÊý×éÖÐÿ¸öÔªËصÄ×Ö½ÚÊý
  • comparÊǸöº¯ÊýÖ¸Õë,ΪÓÃÓڱȽÏÁ½¸öÔªËصĺ¯Êý

ÆäÖÐ,ÓÃÓڱȽÏÔªËصÄcompar·ûºÏÎÒÃǵÄÖ±¾õ,¿É¶¨ÒåΪ

int cmpInt (const void * a, const void * b);

µ±Æä·µ»ØÖµ´óÓÚ0ʱ,±íʾa>b,µÈÓÚ0ʱ,±íʾa=b,СÓÚ0ʱ±íʾa<b¡£

ÕâÖÖº¯ÊýÖ¸Õë³öÏÖÔÚCÓïÑÔ±ê×¼¿âÖиоõ»¹ÊǺÜìÅ¿áµÄ,Á¬´ø×ÅÈÃqsortÒ²ÏԵø߼¶¸ÐÊ®×ã,ÏÂÃæ¾Ù¸öÀý×ÓÀ´²âÊÔÒ»ÏÂ

//sortList.c
#include <stdio.h>
#include <stdlib.h>

int cmpInt (const void * a, const void * b){
   return (*(int*)a - *(int*)b);
}

void printList(int *lst, int N){
   for(int n = 0 ; n < N; n++ )
      printf("%d ", lst[n]);
    printf("\n");
}

int main(){
    int N = 8;
    int lst[N];
    for(int i=0; i<N; i++)
        lst[i] = rand();
    printf("the original list: ");
    printList(lst, N);
    
    qsort(lst, N, sizeof(int), cmpInt);
    printf("the qSorted list: ");
    printList(lst, N);
    
    return 0;
}

Êä³ö½á¹ûΪ

>gcc sortList.c
>a.exe
the original list: 41 18467 6334 26500 19169 15724 11478 29358
the qSorted list: 41 6334 11478 15724 18467 19169 26500 29358

¶þ·Ö²éÕÒ

Ëùν¶þ·Ö²éÕÒ,Ç°ÌáÊÇÓÐÒ»¸öÓÐÐòÊý×é¡£¼ÙÉèÕâ¸öÊý×éÊÇÉýÐòÊý×é,ÄÇôÏȽ«Õâ¸öÊý×é´ÓÖмä·Ö¿ª,±ä³ÉÁ½·Ý,´Ë֮ν¶þ·Ö¡£È»ºóÓÃÖмäÖµºÍ´ý²éÔªËرȽÏ,Èç¹ûÖмäÖµ´óÓÚ´ý²éÔªËØ,ÄÇô¾ÍÉáÆú´ó·Ý,ÓÃС·ÝºÍ´ý²éÔªËؼÌÐø¶þ·Ö²éÕÒ,ÖªµÀ·ÖÍê»òÕßÕÒµ½´ý²éÔªËØ¡£

stdlib.hÖеĶþ·Ö²éÕÒº¯ÊýΪ

void *bsearch(const void *key, const void *base, size_t nitems, size_t size, int (*compar)(const void *, const void *))

ÆäÖÐ,

  • keyÖ¸ÏòÒª²éÕÒµÄÔªËØ
  • baseÖ¸Ïò±»²éÊý×éµÄµÚÒ»¸ö¶ÔÏó
  • nitemsΪÊý×éÖÐÔªËظöÊý
  • sizeΪÊý×éÖÐÿ¸öÔªËصÄ×Ö½ÚÊý
  • comparÓÃÀ´±È½ÏÁ½¸öÔªËصĺ¯Êý,ºÍqsortÖÐÏàËÆ¡£

Èç¹ûkeyÔÚbaseÊý×éÖÐ,Ôò·µ»ØÊý×éÖеÈÓÚkeyµÄÖµµÄÖ¸Õë,·ñÔò·µ»ØNULL¡£

¾Ù¸öÀý×Ó

//searchList.c
#include <stdio.h>
#include <stdlib.h>

int cmpInt (const void * a, const void * b){
   return (*(int*)a - *(int*)b);
}

void printPos(int* lst, int* pos, int key){
    if(pos == NULL)
        printf("%d is not in lst\n", key);
    else
        printf("Found %d at %d\n", *pos, pos-lst);
}

int main(){
    size_t N = 6;
    int lst[N];
    for(int i=0; i<N; i++)
        lst[i] = rand();
    int *p;

    //¶ÔÂÒÐòlstÖеÄÖµ½øÐвéÕÒ
    printf("----search from unsorted values-----\n");
    for(int i = 0; i<N; i++){
	   p = (int*)bsearch(lst+i, lst, N, sizeof(int), cmpInt);
	   printPos(lst, p, lst[i]);
    }

    //¶ÔÅÅÐòºóµÄlist½øÐвéÕÒ
    printf("---------search from sorted values---------\n");
    qsort(lst, N, sizeof(int), cmpInt);
    for(int i = 0; i<N; i++){
	   p = (int*)bsearch(lst+i, lst, N, sizeof(int), cmpInt);
	   printPos(lst, p, lst[i]);
    }

    //¶Ô²»ÔÚlstÖеÄÖµ½øÐвéÕÒ
    printf("------search rand value ----------\n");
    int rd;
    for(int i = 0; i<3; i++){
        rd = rand();
        p = (int*)bsearch(&rd, lst, N, sizeof(int), cmpInt);
        printPos(lst, p, rd);
    }
   
   return 0;
}

µÃµ½Æä½á¹ûΪ

>gcc test.c
>a.exe
----search from unsorted values-----
Found 41 at 0
18467 is not in lst
Found 6334 at 2
26500 is not in lst
Found 19169 at 4
15724 is not in lst
---------search from sorted values---------
Found 41 at 0
Found 6334 at 1
Found 15724 at 2
Found 18467 at 3
Found 19169 at 4
Found 26500 at 5
------search rand value ----------
11478 is not in lst
29358 is not in lst
26962 is not in lst

±ØÐëҪעÒâµÄÒ»µãÊÇ,¶þ·Ö²éÕÒÊäÈëµÄÊý×é±ØÐëÊÇÓÐÐòµÄ,bsearchÖ»»á»úеµØ°´ÕձȽϺ¯Êý½øÐжþ·Ö,¶ø²¢Ã»ÓÐÅÅÐòµÄÒåÎñ¡£Èç¹ûÊäÈëÊÇÂÒÐò,ÄÇô¿ÉÊÂÏÈͨ¹ýqsort½øÐÐÅÅÐò¡£

string.h

ΪÁË¿´ÉÏÈ¥¹æÕû¼ò½à,Áî

#define cSTR const char *str
#define vSTR const void *str

ÓÉÓÚ×Ö·û´®×ÔÉí´æÔÚÖÕÖ¹·û\0,ËùÒÔ±¾½ÚËùÓÐÌá¼°¶Ô×Ö·û´®Ç°n¸ö×Ö·ûµÄ²Ù×÷,¾ùĬÈÏnСÓÚ×Ö·û´®³¤¶È;Èôn´óÓÚ×Ö·û´®³¤¶È,Ôò¶Ô×Ö·û´®ÕûÌå½øÐвÙ×÷¡£

CÓïÑÔÖеÄ×Ö·û´®ÎÞ·ÇÊÇÖÕÖ¹ÓÚ\0µÄ×Ö·ûÊý×é,µ«²¢Î´ÌṩÈκ㤶ÈÐÅÏ¢,ËùÒÔÒªÓÐÒ»¸öº¯ÊýÀ´¼ÆËã×Ö·û´®³¤¶È,´Ë¼´

size_t strlen(cSTR)

È»ºóÈÏʶһÏÂÓÃÓÚ·Ö¸î×Ö·û´®µÄstrtok

char *strtok(char *str, const char *delim)

Æ书ÄÜΪͨ¹ýdelim½«str·Ö½âΪһ×éС×Ö·û´®,Ëùν·Ö½â,Æäʵ¾ÍÊǽ«·Ö¸î·ûºÅÌ滻Ϊ\0;È»ºó·µ»Ø±»·Ö¸îÖ®ºóµÄµÚÒ»¸ö×Ö·û´®¡£

ÔÚstrtok¶Ô×Ö·û´®·Ö¸îÖ®ºó,¿Éͨ¹ý±í´ïʽstrtok(NULL, delim),½«±»·Ö¸îºóµÄ×Ö·û´®ÖðÒ»µ÷³ö¡£

//teststrtok.c
#include<stdio.h>
#include<string.h>

int main(){
	char oldStr[50] = "I am tiny cold";
	const char s[2] = " ";
	printf("str length: %d\n", strlen(oldStr));
	char* newStr = strtok(oldStr,s);
	while(newStr != NULL){
		printf("the newStr is ¡¾%s¡¿ with length : %d\n", newStr, strlen(newStr));
		newStr = strtok(NULL, s);
	}
	return 0;
}

²âÊÔ½á¹ûΪ

>gcc testStrtok.c
>a.exe
str length: 20
the newStr is ¡¾I¡¿ with length : 1
the newStr is ¡¾am¡¿ with length : 2
the newStr is ¡¾tiny¡¿ with length : 4
the newStr is ¡¾cold¡¿ with length : 4     

½ÓÏÂÀ´½«string.hÖеĺ¯Êý·ÖΪËĸöÀà±ð,·Ö±ðÊDzéѯ±È½Ï¸´ÖƺÍ×·¼ÓÒÔ¼°±¾µØº¯Êý¡£

ÓÉÓÚ×Ö·û´®ÊÇ´æÔÚ³¤¶ÈµÄ,ËùÒÔÔÚ±¾ÎÄÖÐ,ËùÓÐ×Ö·û´®ÖÐÇ°n¸ö×Ö·ûÖеÄnĬÈϲ»´óÓÚ×Ö·û´®³¤¶È¡£

²éѯº¯Êý

²éѯº¯Êý·µ»ØÀàÐÍ
void *memchr(vSTR, int c, size_t n)strÇ°n¸ö×Ö½ÚÖÐÊ״γöÏÖcµÄλÖÃÖ¸Õë
char *strchr(cSTR, int c)strÊ״γöÏÖcµÄλÖÃÖ¸Õë
char *strrchr(cSTR, int c)str×îºó³öÏÖcµÄλÖÃÖ¸Õë
char *strstr(cSTR1, cSTR2)str1ÖÐÊ״δγöÏÖ×Ö·û´®str2µÄλÖÃÖ¸Õë
char *strpbrk(cSTR1, cSTR2)str1ÖÐÊ׸ö¸öÊôÓÚstr2µÄ×Ö·ûµÄλÖÃÖ¸Õë
size_t strspn(cSTR1, cSTR2)str1ÖеÚÒ»¸ö²»ÊôÓÚstr2µÄ×Ö·ûµÄË÷ÒýÕûÊý
char *strerror(int errnum)¸ù¾Ý´íÎóºÅerrnumË÷Òý´íÎóÃû
Ïê¼ûerrno.h

±È½Ïº¯Êý

±È½Ïº¯Êý·µ»Ø
int memcmp(vSTR1, vSTR2, size_t n)±È½Ïstr1ºÍstr2µÄÇ°n¸ö×Ö½Ú
int strncmp(cSTR1, cSTR2, size_t n)±È½Ïstr1ºÍstr2µÄÇ°n¸ö×Ö·û
int strcmp(cSTR1, cSTR2)±È½Ïstr1ºÍstr2
size_t strcspn(cSTR1, cSTR2)str1¿ªÍ·Á¬Ðø²»º¬str2ÖÐ×Ö·ûµÄ¸öÊý

×¢Òâ

ÓйØ×Ö·û´®str1ºÍstr2µÄ±È½ÏÖÐ:

  • Èô¶þÕßÏàµÈ,Ôò·µ»Ø0
  • Èôstr1<str2,Ôò·µ»ØֵСÓÚ0
  • Èôstr1>str2,Ôò·µ»ØÖµ´óÓÚ0

¸´ÖƺÍ×·¼Ó

ÏÂÃæÓÃÓÚ×Ö·û´®¸´ÖƵĺ¯Êý,¾ù·µ»ØÒ»¸öÖ¸ÏòÄ¿±ê×Ö·û´®µÄÖ¸Õë¡£

¸´ÖÆ
char *strcpy(char *dest, vSTR)½«str¸´ÖƵ½dest
char *strncpy(char *dest, cSTR, size_t n)°ÑstrÇ°n¸ö×Ö·û¸´ÖƵ½ dest
void *memset(void *str, int c, size_t n)½«strµÄÇ°n¸ö×Ö·ûÉèΪc
void *memcpy(void *dest, vSTR, size_t n)
void *memmove(void *dest, vSTR, size_t n)
½«strµÄÇ°n¸ö×Ö½Ú¸´ÖƵ½dest

ÆäÖÐ,strncpyÊǶÔ×Ö·û´®µÄ²Ù×÷,¶ømemcpyÊǶÔÄÚ´æ¿éµÄ²Ù×÷¡£

Èç¹ûÄÚ´æ¿é·¢ÉúÖصþ,memmove¿ÉÒÔ±£Ö¤Ô´×Ö·û´®±»¸²¸Ç֮ǰ,½«ÖصþÇøÓòµÄ×Ö½Ú¸´ÖƵ½Ä¿±êÇøÓò,ËùÒÔ±Èmemcpy¸ü¼Ó°²È«¡£

Ëùν׷¼Ó,ÎÞ·ÇÊǽ«Ò»¸ö×Ö·û´®µÄÄÚÈݸ´ÖƵ½ÁíÒ»¸ö×Ö·û´®µÄ½áβ,±¾ÖÊÉÏÒ²¿É³ÆΪ¹ãÒåµÄ¸´ÖÆ¡£

×·¼Ó
char *strcat(char *dest, cSTR)°Ñstr×·¼Óµ½dest½áβ¡£
char *strncat(char *dest, cSTR, size_t n)°ÑstrµÄÇ°n¸ö×Ö·û×·¼Óµ½dest½áβ

±¾µØº¯Êý

Ëùν±¾µØº¯Êý,¾ÍÊÇÊܵ½locale.hÖÐLC_COLLATEÓ°ÏìµÄº¯Êý,Æ书Äܺͷµ»Øֵȡ¾öÓÚµ±Ç°ËùÔڵĵØÇø¡£string.hÖй²ÓÐÁ½¸ö±¾µØº¯Êý,·Ö±ðÊÇÓÃÓÚ×Ö·û´®±È½ÏµÄstrcollºÍÓÃÓÚ¸ü¸Ä×Ö·û´®¸ñʽµÄstrxfrm¡£

¶ÔÓÚÇ°Õß,ÈôÎÒÃÇÏë¶ÔÒ»×麺×Ö°´ÕÕÆ´Òô½øÐÐÅÅÐò,ÄÇô¾ÍÒªÓõ½strcoll,ÆäÉùÃ÷Ϊ

int strcoll(cSTR1, cSTR2)

×öÒ»¸ö²âÊÔ

//testStrcoll.c
#include <stdio.h>
#include <string.h>
#include <locale.h>

void printStrcoll(const char *str1, const char *str2){
    char flag = strcoll(str1,str2)>0 ? '>' : '<';
    printf("%s%c%s\n",str1, flag, str2);
}

int main (void)
{
    printf ("ĬÈϱȽÏ:");
    printStrcoll("¼×","ÒÒ");

    setlocale (LC_ALL, "");
    printf ("Æ´Òô±È½Ï:");
    printStrcoll("¼×","ÒÒ");

    return 0;
}

ÓÉÓÚÎÒʵÔÚ²»ÊìϤºº×Ö±àÂë˳Ðò,ËùÒÔÑ¡ÔñÁËÒ»¸ö²»Ì«ÄÜ˵Ã÷ÎÊÌâµÄÁ½¸ö×Ö·û,Æä½á¹ûΪ

>gcc testStrcoll.c
>a.exe
ĬÈϱȽÏ:¼×>ÒÒ
Æ´Òô±È½Ï:¼×>ÒÒ

ÐèҪעÒâ,±¾³ÌÐòÓõÄÊÇgcc11.2½øÐбàÒëµÄ,µÍÓÚ10µÄ°æ±¾¿ÉÄܻẺ×ÖÂÒÂë¡£

ÁíÒ»¸ö±¾µØº¯ÊýÉùÃ÷Ϊ

size_t strxfrm(char *dest, cSTR, size_t n)

Æ书ÄܾÍÊǼòµ¥µÄ½«strµÄÇ°n¸ö×Ö·ûת»»Îª±¾µØÐÎʽºó¸´ÖƵ½destÖÐ,·µ»ØÖµÊDZ»×ª»»µÄ×Ö·û³¤¶È¡£

ctype.h

×÷ΪǿÀàÐÍÓïÑÔ,CÓïÑÔ×ÔÆäµ®ÉúÒÔÀ´,¾Íͨ¹ýÀàÐÍÀ´Îª³õѧÕßÔö¼ÓÖØÖØ×è°­¡£ÎªÁ˱ÜÃâ¸÷ÖÖÂé·³,ÔçÔÚÉϹÅʱÆÚ,CÓïÑԵijÌÐòÔ±ÃǾÍдÁË´óÁ¿Åбð±äÁ¿ÀàÐ͵ĴúÂë¶Î,ÕâЩ´úÂë¶ÎÒ²ºÜ¿ì¾Í×ß½øÁ˱ê×¼¿â¡£

ctypeÖй²ÓÐ11¸ö¼ø±ð×Ö·ûÀàÐ͵ĺ¯Êý,ÕâЩº¯ÊýµÄÊäÈëÊä³ö¾ùΪintÐÍ,µ«ÓÖ²»ÍêÈ«ÊÇintÐÍ¡£ÊäÈëµÄintÊÇͨ¹ýǿתµÃµ½µÄ;Êä³öΪ0ºÍ1,¼´²¼¶ûÐÍ¡£

·µ»Ø1µÄÇé¿öASCIIÂëλÖÃÊ®Áù½øÖÆ
isalnum×ÖĸºÍÊý×Ö48-57, 65-90, 97-12230-39, 41-5A, 61-7A
isalpha×Öĸ65-90, 97-12241-5A, 61-7A
isupper´óд×Öĸ65-9041-5A
islowerСд×Öĸ97-12261-7A
iscntrl¿ØÖÆ×Ö·û0-31,12700-1F, 7F
isdigitÊ®½øÖÆÊý×Ö48-5730-39
isxdigitÊ®Áù½øÖÆÊý×Ö48-57, 48-53, 97-10230-39,41-46, 61-66
isgraphͼÐÎ×Ö·û33-12621-7E
isprint¿É´òÓ¡32-12620-7E
ispunct±êµã·ûºÅ33-47, 58-64
91-96, 123-126
21-2F, 3A-40
5B-60, 7B-7E
isspace¿Õ°××Ö·û9-13,3209-0D, 20

Åбðº¯ÊýÖ®¼ä¿ÉÓÉÏÂͼ±íʾ

isxdigit
A-F a-f
isdigit
isprint
isgraph
isalnum
0-9
isalpha
isupper
A-Z
islower
a-z
ispunct
! # $ % & 'µÈ
space
isspace
FF NL CR HT VT
iscntrl
BEL BS

´ËÍâ,ctypeÖл¹·â×°ÁËÁ½¸ö´óСдת»»µÄº¯Êý:int tolower(int c)ºÍint toupper(int c),ÕâÁ½¸öº¯ÊýºÜÈÝÒ×ʵÏÖ,Ö»Òª¿´Ò»ÏÂÊ®Áù½øÖÆϵÄASCII¼´¿É·¢ÏÖ¡£

Ç°32¸ö×Ö·ûΪ¿ØÖÆ·û

0123456789ABCDEF
0NULSOHSTXETXEOTENQACKBELBSHTLFVTFFCRSOSI
1DLEDC1DC2DC3DC4NAKSYNETBCANEMSUBESCFSGSRSUS

32-126Ϊ¿É´òÓ¡×Ö·û,ÆäÖÐ20Ϊ¿Õ¸ñ,´óСд×ÖĸÕýºÃ²îÁË0x20¡£

0123456789ABCDEF
2!"#$%&¡¯()*+,-./
30123456789:;<=>?
4@ABCDEFGHIJKLMNO
5PQRSTUVWXYZ[\]^_
6`abcdefghijklmno
7pqrstuvwxyz{|}~DEL

math.h

doubleÐ͵ÄÊýѧÔËËã°ü,·â×°ÁË×î³£ÓõÄһЩÊýѧº¯Êý,ÆäÖÐÈý½Çº¯Êý¾ùÓû¡¶ÈÖÆ¡£

²»Ì«ÐèÒª½âÊ͵ĺ¯Êý
Èý½Çº¯Êýacos, asin, atan, cos, cosh, sin, atan2(y,x)= arctan ? y x \arctan\frac{y}{x} arctanxy?
Ë«Çúº¯Êýcosh, sinh, tanh
Ö¸Êý¶ÔÊýexp, log, log10, sqrt, pow(x,y)= x y x^y xy
È¡Õûº¯ÊýÏòÉÏÈ¡Õûceil,ÏòÏÂÈ¡Õûfloor
ÆäËûº¯Êý¾ø¶ÔÖµfabs, ÇóÓàfmod, ldexp(x, y)= x ¡Á 2 y x\times2^y x¡Á2y

modf(double x, double *integer)·µ»ØֵΪСÊý²¿·Ö,²¢ÉèÖà integer ΪÕûÊý²¿·Ö¡£ÀýÈçÁîx=2.5,ÔòÊä³öΪ0.5,È»ºóÈÃinteger=2¡£

frexp(double x, int *exponent)¿É½«x·Ö½â³ÉβÊýºÍÖ¸Êý,·µ»ØÖµÊÇβÊý,²¢½«Ö¸Êý´æÈëexponentÖС£ËùµÃµÄÖµÊÇ x = mantissa * 2 ^ exponent¡£

#include<stdio.h>
#include<math.h>

int main(){
	float y,x;
	int a;
	x = 25.5;
	y = frexp(x,&a);
	printf("%f=%f*2^%d",x,y,a);
	return 0;
}

ÔËÐÐÖ®ºóµÃµ½

>gcc testMath.c
>a.exe
>25.500000=0.796875*2^5 (x=y*2^a)

ʱ¼äÓë»õ±Ò

time.h

Ò»°ã¼ÆËã»úÖÐͨ¹ýʱ¼ä´ÁÀ´´ú±íʱ¼ä,Ëùνʱ¼ä´Á¾ÍÊÇ´Ó1970Äê11ÈÕ0ʱ0·Ö0Ã뿪ʼµ½µ±Ç°Ê±¿ÌËù¾­ÀúµÄÃëÊý¡£ÔÚCÓïÑÔÖÐ,time_t¾ÍÊÇרÃűíʾÕâ¸öʱ¼ä´ÁµÄÊý¾ÝÀàÐÍ,ÔÚÈç½ñµÄ²Ù×÷ϵͳÖÐ,Ò»°ãtime_t¶¼ÊÇ64λÕûÐÍ¡£

º¯Êýtime()¿ÉÒÔ»ñÈ¡µ±Ç°µÄʱ¼ä´Á,²¢½«Æä±àÂëλtime_t¸ñʽ¡£Í¨¹ýctimeº¯Êý,¿É½«Ê±¼ä´ÁתΪ±ãÓÚÔĶÁµÄÄêÔÂÈÕ×Ö·û´®¡£

ÀýÈç

#include<stdio.h>
#include<time.h>

int main(){
	time_t seconds = time(NULL);            //»ñÈ¡µ±Ç°Ê±¼ä´Á
	printf("timestamp: %ld\n", seconds);    //Êä³öʱ¼ä´Á
	printf("time:%s\n", ctime(&seconds));   //Êä³öʱ¼ä×Ö·û´®
	return(0);
}

±àÒëÔËÐÐÖ®ºóΪ

>gcc testTime.c
>a.exe
timestamp: 1639375539
time:Mon Dec 13 14:05:39 2021   

ºÍtime_tÏàËÆ,time.hÖл¹ÉèÖÃÁËclock_tÓÃÀ´ÃèÊö´¦ÀíÆ÷ʱ¼ä,ͨ¹ýÎÞ²ÎÊýº¯Êýclock()¿ÉÒÔÖ±½Ó·µ»ØÒ»¸öclock_tÀàÐ͵ÄÊý¾Ý¡£

ÔÚtime.hÖл¹¶¨ÒåÁËtm½á¹¹,ÓÃÓÚ´æ´¢ÈÕÆÚºÍʱ¼ä¡£

struct tm {
   int tm_sec;         // Ãë,·¶Î§´Ó 0 µ½ 59
   int tm_min;         // ·Ö,·¶Î§´Ó 0 µ½ 59
   int tm_hour;        // Сʱ,·¶Î§´Ó 0 µ½ 23
   int tm_mday;        // Ò»ÔÂÖеĵڼ¸Ìì,·¶Î§´Ó 1 µ½ 31
   int tm_mon;         // ÔÂ,·¶Î§´Ó 0 µ½ 11
   int tm_year;        // ×Ô 1900 ÄêÆðµÄÄêÊý
   int tm_wday;        // Ò»ÖÜÖеĵڼ¸Ìì,·¶Î§´Ó 0 µ½ 6
   int tm_yday;        // Ò»ÄêÖеĵڼ¸Ìì,·¶Î§´Ó 0 µ½ 365
   int tm_isdst;       // ÏÄÁîʱ
};

gmtimeºÍlocaltimeº¯Êý¿É½«Ê±¼ä´ÁתΪtm½á¹¹,Ç°Õß·µ»ØµÄÊǸñÁÖÄáÖαê׼ʱ¼ä,ºóÕß·µ»ØµÄÊDZ¾µØʱ¼ä¡£È»ºó,ºÍctimeÏàËÆ,asctime¿ÉÒÔ°Ñtm½á¹¹×ªÎª·½±ãÔĶÁµÄ×Ö·û´®¡£

·´¹ýÀ´,ͨ¹ýmktime¿É½«tm½á¹¹°´ÕÕ±¾µØʱ¼äµÄ·½Ê½×ª»¯Îªtime_t¸ñʽµÄʱ¼ä´Á¡£

²âÊÔ³ÌÐòÈçÏÂ

#include<stdio.h>
#include<time.h>

int main(){
	time_t seconds = time(NULL);
	struct tm *tLocal;
	tLocal = localtime(&seconds);
	printf("Local: %2d:%02d\n",tLocal->tm_hour, tLocal->tm_min);
	printf("Local asctime: %s\n", asctime(tLocal));
	return(0);
}

Êä³öΪ

Local: 14:26
Local asctime: Mon Dec 13 14:26:45 2021    

Èç¹û¶ÔctimeµÄ·µ»ØÖµ²»ÂúÒâ,»¹¿ÉÒÔͨ¹ýstrftimeº¯Êý×Ô¶¨Òåʱ¼ä¸ñʽ,ÆäÉùÃ÷Ϊ

size_t strftime(char *str, size_t maxsize, const char *format, const struct tm *timeptr)

ÆäÖÐ,timeptrΪ´«ÈëµÄtmÖ¸Õë;strΪΪʱ¼äÈÕÆÚ×Ö·û´®,ÓÃÓÚÊä³ö;maxsize±íʾ±»¸´ÖƵ½strµÄ×î´ó×Ö·û¸öÊý¡£¶øÊäÈë²ÎÊýÖÐ,×î¹Ø¼üµÄÔòÊÇformatÕâ¸ö×Ö·û´®¡£

ÔÚformatÖÐ,ÿ¸ö×Ö·ûµÄº¬ÒåÈçÏÂ

ÐÇÆÚ%aΪËõдÐÇÆÚÃû³Æ,%AΪÍêÕûÐÇÆÚÃû³Æ, %w±íʾÐÇÆÚ¼¸(ÐÇÆÚÈÕΪ0)
ÐÇÆÚ%U, %W±íʾһÄêÖеĵڼ¸ÖÜ,¶þÕß·Ö±ðÒÔÊ׸öÖÜÈÕ¡¢Ê׸öÖÜһΪÊ×ÖÜÊ×ÈÕ
Ô·Ý%bΪËõдÔ·ÝÃû³Æ,%BΪÍêÕûÔ·ÝÃû³Æ,%m±íʾµÚ¼¸ÔÂ
Äê·Ý%yΪÄê·ÝºóÁ½¸öÊý×Ö,%YΪÍêÕûÄê·Ý
ÈÕÆÚ%dΪһÔÂÖеĵڼ¸Ìì,%jΪһÄêÖеĵڼ¸Ìì
Сʱ%HΪ24Сʱ¸ñʽ,%IΪ12Сʱ¸ñʽ
·ÖÃë%M±íʾ·Ö,%S±íʾÃë
·ûºÅ%p±íʾ¡¯AM¡¯»ò¡¯PM¡¯,%Z±íʾʱÇøµÄÃû³Æ»òËõд,%%Ϊ%תÒå
¸ñʽ%xΪÈÕÆÚ±íʾ·¨:08/19/12%XΪʱ¼ä±íʾ·¨:02:50:06
%cΪÈÕÆÚºÍʱ¼ä±íʾ·¨ Sun Aug 19 02:56:02 2012

locale.h

locale.h¶Ôʱ¼äºÍ»õ±ÒµÄÊéд¸ñʽ½øÐÐÁË·â×°,´Ó¶ø·ûºÏ²»Í¬µØÇøµÄʹÓÃÏ°¹ß,¹Ê¶ølocale.hÖÐÉè¼ÆÁËÁ½¸öÓÃÓÚ±¾µØ»¯µÄº¯Êý

char *setlocale(int category, const char *locale)
struct lconv *localeconv(void)

Ç°ÕßÓÃÓÚÉèÖûò¶ÁÈ¡±¾µØ»¯ÐÅÏ¢,locale¼´´ú±íij¸öÇøÓòµÄ×Ö·û´®,category´ú±í½«ÒªÉèÖõĺ¯ÊýÀà±ð,ÆäÊäÈë²ÎÊý°üÀ¨

Öµºê˵Ã÷Ó°ÏìµÄº¯Êý
0LC_ALLÏÂÃæµÄËùÓÐÑ¡Ïî
1LC_COLLATE×Ö·û´®±È½Ïstrcoll ºÍ strxfrm
2LC_CTYPE×Ö·û·ÖÀàºÍת»»ËùÓÐ×Ö·ûº¯Êý
3LC_MONETARY»õ±Ò¸ñʽlocaleconv()
4LC_NUMERICСÊýµã·Ö¸ô·ûlocaleconv()
5LC_TIMEÈÕÆÚºÍʱ¼ä¸ñʽstrftime()
6LC_MESSAGESϵͳÏìÓ¦

ÆäÖÐ,localeconv()º¯Êý±»·â×°ÔÚlocale.hÖÐ,Æä·µ»ØÖµÊÇÒ»¸ölconv½á¹¹,Ö÷ÒªÓÃÓÚÃèÊö»õ±ÒµÄ±íʾ·½·¨,ÿ¸ö×ֶεĺ¬ÒåÔÚÏÂÃæµÄ×¢ÊÍÖÐ˵Ã÷¡£ÔÚ×¢ÊÍÖÐ,cs±íʾµ±Ç°ÇøÓòµÄ»õ±Ò·ûºÅ¡£

typedef struct {
   char *decimal_point;     //³£¹æÊýÖµµÄСÊýµã×Ö·û
   char *thousands_sep;     //³£¹æÊýÖµµÄǧλ·Ö¸ô·û
   char *grouping;          //³£¹æÊýÖµÖÐÿ×éÊý×Ö´óСµÄ×Ö·û´®
   char *int_curr_symbol;   //¹ú¼Ê»õ±Ò·ûºÅʹÓõÄ×Ö·û´®¡£Ç°Èý¸ö×Ö·ûÓÉ ISO 4217:1987 Ö¸¶¨,µÚËĸö×Ö·ûÓÃÓÚ·Ö¸ô»õ±Ò·ûºÅºÍ»õ±ÒÁ¿¡£
   char *currency_symbol;   //µ±Ç°ÇøÓòµÄ»õ±Ò·ûºÅ,ºóÎÄÓÃcs±íʾ
   char *mon_decimal_point; //»õ±ÒµÄСÊýµã×Ö·û
   char *mon_thousands_sep; //»õ±ÒµÄǧλ·Ö¸ô·û
   char *mon_grouping;      //»õ±ÒÊýÖµÖÐÿ×éÊý×Ö´óСµÄ×Ö·û´®
   char *positive_sign;     //»õ±ÒµÄÕýºÅ
   char *negative_sign;     //»õ±ÒµÄ¸ººÅ
   char int_frac_digits;    //¹ú¼Ê»õ±ÒÖµÖÐСÊýµãºóÒªÏÔʾµÄλÊý
   char frac_digits;        //»õ±ÒÖµÖÐСÊýµãºóÒªÏÔʾµÄλÊý¡£
   char p_cs_precedes;      //csÔÚÕý»õ±ÒÖµÖеÄλÖÃ
   char p_sep_by_space;     //csÓëÕý»õ±ÒÖµÖ®¼äÊÇ·ñʹÓÿոñ
   char n_cs_precedes;      //csÔÚ¸º»õ±ÒÖµÖеÄλÖÃ
   char n_sep_by_space;     //csÓ븺»õ±ÒÖµÖ®¼äÊÇ·ñʹÓÿոñ
   char p_sign_posn;        //±íʾÕý»õ±ÒÖµÖÐÕýºÅµÄλÖÃ
   char n_sign_posn;        //±íʾ¸º»õ±ÒÖµÖиººÅµÄλÖÃ
} lconv

ÆäÖÐ,groupingºÍmon_grouping¾ùΪ×Ö·û´®,·Ö±ð±íʾÔÚ³£¹æÊýÖµºÍ»õ±ÒÖÐÿ×éÊý×Ö´óС¡£×Ö·û´®ÖÐÿ¸ö×Ö·û¶¼´ú±íÒ»¸öÕûÊý,ÓÃÒÔÖ¸¶¨µ±Ç°×éµÄλÊý¡£

µ±Ç°ÇøÓòµÄ»õ±Ò·ûºÅcsÓë»õ±ÒÖµÖ®¼äµÄÅŰ淽ʽΪ

ֵΪ1ֵΪ0
p_cs_precedescsÔÚÕý»õ±Òֵ֮ǰcsÔÚÕý»õ±ÒÖµÖ®ºó
p_sep_by_spacecsºÍÕý»õ±ÒÖµÖ®¼äÓÿոñcsºÍÕý»õ±ÒÖµÖ®¼ä²»Ê¹Óÿոñ
n_cs_precedescsÔÚ¸º»õ±Òֵ֮ǰcsÔÚ¸º»õ±ÒÖµÖ®ºó¡£
n_sep_by_spacecsºÍ¸º»õ±ÒÖµÖ®¼äʹÓÿոñcsºÍ¸º»õ±ÒÖµÖ®¼ä²»Ê¹Óÿոñ

»õ±ÒÖÐÕý¸ººÅµÄλÖÃͨ¹ýp_sign_posnºÍn_sign_posnÀ´µ÷½Ú,¶þÕß¾ùÓÐ5¸öÈ¡Öµ¡£

¶ÔÓÚ-1ÃÀÔª,Æän_sign_posnÈ¡Öµ´Ó0-5,n_cs_precedes·Ö±ðΪ0,1ʱ,±íʾ·½·¨·Ö±ðÈçÏÂ

01234
0(1.00$)-1.00$1.00$-1.00-$1.00$-
1($1.00)-$1.00$1.00--$1.00$-1.00
˵Ã÷À¨ºÅÊýÖµºÍcs֮ǰÊýÖµºÍcsÖ®ºócs֮ǰcsÖ®ºó

µ¥¹¦ÄÜ¿â

CÓïÑÔ±ê×¼¿âÖÐÓкܶàÊ®·Ö¼òµ¥,¹Êͳһ¹éÀൽµ¥Ò»¹¦ÄÜ¿âÏÂ,°üÀ¨

stdarg.h¿É±ä²ÎÊýÖ§³Ö
stddef.hÖ¸ÕëÏà¼õ
setjmp.hÌøת

assert.h

¾­µä¶ÏÑÔ

¸Ð¾õÏÖÔںܶàÈ˶¼²»ÓÃassertÁË,±Ï¾¹IDE¶¼ÕâôÖÇÄÜ,assertµÄ¹¦ÄÜÒ²·Ç³£¼òµ¥,Èç¹ûÊäÈëÒ»¸ö0(False),ÄÇô¾Í»á´òÓ¡Ò»Ìõ´íÎóÐÅÏ¢¡£

#include<stdio.h>
#include<assert.h>

int main(){
	assert(1);
	assert(0);
}

ÕâÑùÒ»¸ö¼òµ¥µÄ°¸Àý,ÔÚÃüÁîÐÐÖÐͨ¹ýgcc±àÒë,¹ûÈ»ÔÚµÚ6Ðб¨´íÁË¡£

E:\Documents\00\1101>gcc assert1.c

E:\Documents\00\1101>a.exe
Assertion failed: 0, file assert1.c, line 6

²é¿´insert.hµÄÔ´Îļþ,»á·¢ÏÖÏÂÃ漸ÐдúÂë

#undef assert       //È¡ÏûÒÑÓеÄassert¶¨Òå
#ifdef NDEBUG
#define assert (test) ((void)0)
#else
#define assert (test) ...
#endif

Õâ˵Ã÷,µ±NDEBUG±»¶¨ÒåµÄʱºò,»á½«assert×Ô¶¯×ª»¯ÎªÒ»¸ö¿Õº¯Êý,´Ó¶øÈ¡Ïû¶ÏÑÔ¡£

gccÖÐ-DÖ¸Áî¿ÉÒÔÌí¼Óºê´úÂë,ÔòÏÂÃæµÄ´úÂë²¢²»»á±¨´í

E:\Documents\00\1101>gcc -DNDEBUG assert1.c
E:\Documents\00\1101>a.exe

C11¾²Ì¬¶ÏÑÔ

assert·Ç³£¼òµ¥,¼òµ¥µ½¿ÉÒÔд³ÉÌõ¼þÓï¾ä

void assertIf(int i){
    if(!i){
        printf("error");
        abort();            //×ÔstdlibÖе÷ÓÃ,¿ÉÖսắÊý
    }
}

assertµÄºÃ´¦ÊÇ,¿ÉÒÔ×Ô¶¯·µ»Ø³ö´íµÄÐÐÊý,²¢ÇÒÄܹ»Í¨¹ýdefine NDEBUG½«Æä½ûÖ¹¡£²»×ãÖ®´¦ÔÚÓÚ,Ö»ÄÜÔÚÔËÐÐʱִÐС£C11ÍƳöÁËÒ»¸öеĺ¯Êý_Static_assert,¹ËÃû˼ÒåΪ¾²Ì¬¶ÏÑÔ,¿ÉÒÔÔÚ±àÒëʱִÐÐ:

//sa.c
#include<assert.h>
int main(){
	_Static_assert(0);
}

½á¹ûΪ

E:\Documents\00\1101>gcc sa.c
sa.c: In function 'main':
sa.c:10:2: error: static assertion failed: "ERROR"
  _Static_assert(0,"ERROR");

stdarg.h

stdarg.hÌṩÁËCÓïÑԶԿɱä²ÎÊýµÄÖ§³Ö,ÏȾÙÒ»¸ö¼ò¶ÌµÄÀý×Ó

//testStdArg.c
#include <stdarg.h>
#include <stdio.h>

void printIntList(int N, ...){
    va_list args;       //´æ·Å...Ëù´ú±íµÄ²ÎÊý
    va_start(args, N);  //³õʼ»¯±äÁ¿args
    for (int idx = 1; idx <= N; ++idx)
        printf("param %d: %d, ", idx, va_arg(args, int));
    printf("-----\n");
    va_end(args);
}

int main(void)
{
    printIntList(4,1,2,3,4);
    printIntList(4,1,2,3);
    printIntList(3,1,2,3,4);
}
>gcc testStdArg.c
>a.exe
param 1: 1, param 2: 2, param 3: 3, param 4: 4, 
-----
param 1: 1, param 2: 2, param 3: 3, param 4: 4, 
-----
param 1: 1, param 2: 2, param 3: 3, 
-----

ÆäÖÐ,va_listΪstdarg.hÖÐÉùÃ÷µÄÊý¾ÝÀàÐÍ,ÓÃÒÔ´æ·Å...Ëù´ú±íµÄ²ÎÊý,ÔÚprintIntListÖÐ,¶¨ÒåÁËva_listÀàÐ͵ÄargsÓÃÓÚ´æ´¢±äÁ¿¡£

ÔÚstdarg.hÖÐÉùÃ÷ÁËÈý¸öº¯Êý,ÔÚÉÏÃæµÄ°¸ÀýÖж¼ÓÃÉÏÁË,ÏÂÃæÖðÒ»½âÎö

void va_start(va_list ap, last_arg)

  • ÓÃÓÚ³õʼ»¯ap±äÁ¿,last_argΪ×îºóÒ»¸ö²ÎÊýµÄϱê
  • ¶ÔÓÚº¯ÊýprintIntList(4,1,2,3,4)¶øÑÔ,×ܹ²ÊäÈëÁË5¸ö²ÎÊý,¹ÊÆälast_argÓ¦¸ÃΪ4¡£

type va_arg(va_list ap, type)

  • Öð¸ö¼ìË÷º¯Êý²ÎÊýÁбíÖÐÀàÐÍΪtype²ÎÊý
  • ÔÚprintIntListÖÐ,va_arg±»Ð´ÔÚÒ»¸öÑ­»·ÖÐ,»áÖð¸ö¼ìË÷intÐ͵IJÎÊý
  • ÔÚprintIntList(4,1,2,3)ÖÐ,ÓÉÓÚNÉèΪ4,ËùÒÔva_arg»á¼ìË÷4´Î,×îºó·µ»ØµÄ4ʵ¼ÊÉÏÊÇÒ»¸öÒ°Ö¸Õë¡£

void va_end(va_list ap)

  • ÔÚ²ÎÊýµ÷ÓýáÊøÖ®ºó,Ó¦¸Ãµ÷ÓÃva_endÀ´ÊÍ·Åap

stddef.h

¶¨ÒåÁËÈý¸öÊý¾ÝÀàÐÍ:size_twchar_tºÍptrdiff_t¡£

ÆäÖÐsize_tÊÇsizeofµÄ½á¹û,Ò»°ãÊÇlong unsigned intwchar_tÓÃÓÚÃèÊö¿í×Ö·û,Ò»°ãÊÇint¡£

ptrdiff_tÊÇÖ¸ÕëÏà¼õµÄÊý¾ÝÀàÐÍ,stddef.h»¹¶¨ÒåÁËÒ»¸öºêº¯Êýoffsetof,ÓÃÓÚÈ·¶¨½á¹¹µÄij¸ö³ÉÔ±µ½ÆðʼλÖõÄÆ«ÒÆ×Ö½Ú¡£

¶ÔÓÚÇ°Õß,ÀýÈç

#include <stdio.h>
#include <stddef.h>

int main(){
    char x[20];
    ptrdiff_t nx = &x[5]-&x[0];
    printf("%d\n", nx);    //Êä³öΪ5
    long int y[20];
    ptrdiff_t ny = &y[5]-&y[1];
    printf("%d\n", ny);    //Êä³öΪ4
    return(0);
}

ͨ¹ýÖ¸ÕëÏà¼õ,µ±È»¿ÉÒԵõ½½á¹¹ÖÐij¸ö×ֶξàÀë½á¹¹Ìå³õʼָÕëµÄ¾àÀë

#include <stdio.h>
#include <stddef.h>
typedef struct TEST{
    int a,b;
}test;

int main(){
    test x;
    static size_t off = (char*)&x->b - (char*)&x;
}

Èç¹ûÏëÔÚ²»´´½¨Ê¾ÊµÀýµÄÇé¿öϵõ½×Ö¶Îbµ½test³õʼֵµÄÆ«Àë,¿ÉÒÔ¿ÉÒÔ²ÉÓÃoffsetofº¯Êý

static size_t off = offsetof(test, b)

setjmp.h

setjmp.hÖÐÓÐÁ½¸öº¯Êý,·Ö±ðÊÇsetjmpºÍlongjmp¡£

setjmpÏ൱ÓڻسDZê¼Ç,¶ølongjmpÔòÊǸö´«ËÍÕó¡£µ÷ÓÃlongjmp»áÌøתµ½setjmpËùÔÚµÄλÖ᪡ª¾ÍÈçgotoÒ»Ñù,µ«gotoÖ»ÄÜÔÚº¯ÊýÄÚÌøת,longjmpÔò¿É¿çÔ½º¯Êý¡£

setjmpÒ»°ã±»Ð´Îª

int setjmp(jmp_buf env)

ÆäÊäÈë²ÎÊýenv¿ÉÀí½âΪÊÇϵͳµØͼ,setjmp½«µ±Ç°Î»Öÿ̼ÔÚµØͼÖС£jmp_bufÊÇÒ»¸ö½á¹¹Ìå,ÓÃÀ´ÃèÊöµ±Ç°µÄµØͼ¡£

ÄÇôµ±³ÌÐò¼ÌÐøÔËÐÐ,ÏëÒª»Ø³ÇµÄʱºò,±»µ÷ÓõÄlongjmpÒ²²»¿É±ÜÃâµØÐèÒªµ¼ÈëÕâ¸öµØͼ¡ª¡ªenv¡£´ËÍâ,ÎÒÃDz»ÄÜƽ°×Î޹ʵػسÇ,±ØÐëµÃ´«´ïһЩÐÅÏ¢,longjmpÕâ¸ö´«ËÍÕóÔÊÐíÎÒÃÇ´«ËÍÒ»¸öÕûÐÍ,Æ䶨ÒåΪ

void longjmp(jmp_buf env, int value)

µ±Ê¹ÓÃlongjmpÖ®ºó,¾Í»áÌøתµ½×î½üÒ»´ÎÖ´ÐеÄsetjmpËùÔÚÐÐ,ͬʱ°Ñvalue´«µÝ¸øsetjmp,×÷ΪsetjmpµÄ·µ»ØÖµ¡£

½ÓÏÂÀ´¾ÙÒ»¸ö×îÖ±¹ÛµÄÀý×Ó

//testJmp.c
#include <stdio.h>
#include <setjmp.h>
int main(){
    jmp_buf env;
    int ret;
    ret = setjmp(env);
    printf("ret=%d\n",ret);
    if(ret==0){
        printf("we'll execute the longjmp and set env=1\n");
        longjmp(env,1);
    }else
        printf("we'll not excute the longjmp because env=1");
    return 0;
}

±àÒëÔËÐеĽá¹ûΪ

>gcc testJmp.c
>a.exe
ret=0
we'll execute the longjmp and set env=1
ret=1
we'll not excute the longjmp because env=1

³£Á¿¿â

  • float.h,ÃèÊö¸¡µãÊý²¢ÌṩÁ˸¡µãËãÊõµÄ»ù±¾ÐÅÏ¢
  • limits.h,ÃèÊöÕûÐͲ¢ÌṩÁËÕûÊý¼ÆËãµÄ»ù±¾ÐÅÏ¢
  • errno.h,±íÃ÷´íÎóÀàÐÍ
  • signal.h:¶¨ÒåÁËÐźźê

float.h

float.hÓÃÒÔÃèÊö¸¡µãÊý²¢ÌṩÁ˸¡µãËãÊõµÄ»ù±¾ÐÅÏ¢,ÕâЩÐÅÏ¢´ó¶àÊÇͨ¹ýºêµÄÐÎʽ¶¨ÒåµÄ¡£

ÔÚCÓïÑÔÖÐ,Ò»¸ö¸¡µãÊý¿ÉÒÔ±íʾΪ

x = s b e ¡Æ k = 1 p f k b ? k , e min ? < e ¡Ü e max ? x=sb^e\sum_{k=1}^pf_kb^{-k}, e_{\min}<e\leq e_{\max} x=sbek=1¡Æp?fk?b?k,emin?<e¡Üemax?

ÆäÖÐ, s s sΪ·ûºÅ,ȡֵΪ ¡À 1 \pm1 ¡À1 b b bÊÇ´óÓÚ1µÄÕûÊý,±íʾ»ùÊý; e e eΪָÊý; p p pΪ¾«¶È; f k f_k fk?±íʾÓÐЧÊý×Ö¡£¼Ç M = ¡Æ k = 1 p f k b ? k M=\sum_{k=1}^pf_kb^{-k} M=¡Æk=1p?fk?b?k,Ôò¿ÉдΪ

x = s ¡Á M ¡Á b e , e min ? < e ¡Ü e max ? x=s\times M\times b^e, e_{\min}<e\leq e_{\max} x=s¡ÁM¡Ábe,emin?<e¡Üemax?

ÔÚfloat.hÖÐ,FLT_RADIX±íʾ»ùÊý,¼´b,Õâ¸öb¶ÔËùÓи¡µãÊýÀàÐͶ¼ÓÐЧ¡£¶øfloat.hµÄdefineµÄÖµÖÐ,¾ø´ó¶àÊý¿É·ÖΪÈýÀà,·Ö±ð¶ÔÓ¦float¡¢doubleºÍlong doubleÀàÐÍ:

floatdoublelong double¼òҪ˵Ã÷
FLT_MANT_DIGDBL_MANT_DIGLDBL_MANT_DIGb½øÖÆÏÂMµÄ×î´ó³¤¶È
FLT_DIG( ¡Ý 6 \ge6 ¡Ý6)DBL_DIG( ¡Ý 10 \ge10 ¡Ý10)LDBL_DIG( ¡Ý 10 \ge10 ¡Ý10)СÊýµãºó¾«È·Êý×ÖλÊý
FLT_MIN_EXPDBL_MIN_EXPLDBL_MIN_EXPb½øÖÆÏÂeµÄ×îСֵ
FLT_MAX_EXPDBL_MAX_EXPLDBL_MAX_EXPb½øÖÆÏÂeµÄ×î´óÖµ
FLT_MIN_10_EXPDBL_MIN_10_EXPLDBL_MIN_10_EXPÊ®½øÖÆÏ e min ? ¡Ü ? 37 e_{\min}\le-37 emin?¡Ü?37
FLT_MAX_10_EXPDBL_MAX_10_EXPLDBL_MAX_10_EXPÊ®½øÖÆÏ e max ? ¡Ý 37 e_{\max}\ge37 emax?¡Ý37
FLT_MAXDBL_MAXLDBL_MAX¸¡µãÊý×î´óÖµ ? 1 0 37 \geqslant10^{37} ?1037
FLT_MINDBL_MINLDBL_MIN¸¡µãÊý×îСֵ ? 1 0 ? 37 \leqslant10^{-37} ?10?37
FLT_EPSILON
( ? 1 0 ? 5 \leqslant10^{-5} ?10?5)
DBL_EPSILON
( ? 1 0 ? 9 \leqslant10^{-9} ?10?9)
LDBL_EPSILON
( ? 1 0 ? 9 \leqslant10^{-9} ?10?9)
×îС²îÖµ

ÆäÖÐ,XXX_EPSILON±íʾ1ºÍ´óÓÚ1µÄ×îС¸¡µãÊýÖ®¼äµÄ²îÖµ¡£

´ËÍâ,»¹ÓÐÈý¸ö¶ÀÁ¢µÄ³£Á¿:

FLT_ROUNDS±íʾ¸¡µã¼Ó·¨µÄÉáÈëģʽ:

  • -1:ÎÞ·¨È·¶¨
  • 0:Ç÷ÏòÓÚÁã
  • 1:Ç÷Ïò×î½üµÄÖµ
  • 2:Ç÷ÏòÓÚÕýÎÞÇî
  • 3:Ç÷ÏòÓÚ¸ºÎÞÇî

FLT_EVAL_METHOD:Ö¸Ã÷±í´ïʽÇóֵʱÊÇ·ñÐèÒªÌáÉý¸¡µãÊýÀàÐÍ

  • -1:²»È·¶¨
  • 0:ʹÓõ±Ç°ÀàÐÍ
  • 1:½«floatÌáÉýµ½double
  • 2:½«¸¡µãÊýÌáÉýµ½long double

DECIMAL_DIG:ÓÃÓÚlong doubleÐòÁл¯ºÍ·´ÐòÁл¯Ê±µÄÊ®½øÖƾ«¶È¡£¼òµ¥µØ˵,ÒÔ²»Ëðʧ¾«¶ÈΪǰÌá,Äܹ»½«long doubleת»»³ÉÖÁÉÙDECIMAL_DIG¸öÊ®½øÖÆÊý×Ö;·´¹ýÀ´,Ò²Äܽ«ÖÁÉÙDECIMAL_DIG¸öÊ®½øÖÆÊý×Öת»»³Élong double¡£

limits.h

ºÍfloat.hÀàËÆ,limits.hÖж¨ÒåÁËÕûÐÍÊý¾ÝµÄÈ¡Öµ·¶Î§,¶ÔÓÚcharÀàÐÍ,»¹¶îÍâ¸ø³öÁËCHAR_BIT±íʾcharËù°üº¬µÄλÊý,È¡Öµ´óÓÚµÈÓÚ8,Ò»°ãΪ8¡£ÁíÓÐMB_LEN_MAX±íʾһ¸ö×Ö½Ú×Ö·û×î¶àÄÜ°üº¬µÄ×Ö½ÚÊý,Ðè´óÓÚµÈÓÚ1¡£

ÀàÐÍ×î´óÖµ×îСֵһ°ãÈ¡Öµ
charCHAR_MAXCHAR_MIN
singed charSCHAR_MAXSCHAR_MIN ¡À 127 \pm127 ¡À127
unsinged charUCHAR_MAX 255 255 255
short intSHRT_MAXSHRT_MIN ¡À 32767 \pm32767 ¡À32767
unsigned
short int
USHRT_MAX 65536 65536 65536
intINT_MAXINT_MIN ¡À 32767 \pm32767 ¡À32767
unsigned intUINT_MAX 65536 65536 65536
long intLONG_MAXLONG_MIN ¡À ( 2 31 ? 1 ) \pm(2^{31}-1) ¡À(231?1)
unsigned
long int
ULONG_MAX 2 32 ? 1 2^{32}-1 232?1
long long intLLONG_MAXLLONG_MIN ¡À ( 2 63 ? 1 ) \pm(2^{63}-1) ¡À(263?1)
unsigned
long long int
ULLONG_MAX 2 64 ? 1 2^{64}-1 264?1

´ËÍâ,CHAR_MINµÄֵΪ0»òSCHAR_MIN;´ËÍâ,CHAR_MAXµÄֵΪSCHAR_MAX»òUCHAR_MAX¡£

ÕâЩºê²¢·ÇºÁÎÞÒâÒå,¶øÊǶ¨ÒåÁËÕûÐÍÔÚCÓïÑÔÖеıàÂ뷽ʽ¡£

Ê×ÏÈ,×î¼òµ¥µÄÊý¾ÝÀàÐÍÊÇÎÞ·ûºÅÕûÐÍ,ÄËÖÁÓÚ¼¸ºõ²»´æÔÚ¡°±àÂ롱,Ö»Ðè°ÑÕûÊýдΪ¶þ½øÖÆ,ÀýÈç1011¾ÍÊÇ11¡£Æä¹æ·¶µÄ¶¨Ò巽ʽΪ

¡Æ i N x i 2 i \sum^N_ix_i2^i i¡ÆN?xi?2i

ÆäÖÐ, i i i±íʾ¶þ½øÖƵÄλÊý, x i x_i xi?±íʾµÚ i i iλµÄ¶þ½øÖÆÖµ,¿ÉÈ¡0»òÕß1¡£´Ó¶ø1011дΪ

1 ? 2 3 + 0 ? 2 2 + 1 ? 2 1 + 1 ? 2 0 = 11 1\cdot2^3+0\cdot2^2+1\cdot2^1+1\cdot2^0=11 1?23+0?22+1?21+1?20=11

ÓÉÓÚÔÚÎïÀí²ãÃæ²¢²»´æÔÚÀàËÆ-1111µÄ¸ºµØÖ·,ËùÒÔ¸ºÊý,»òÕß´øÓзûºÅµÄÕûÐÍÐèÒª±àÂë,¼ÆËã»úÖг£Óò¹Âë±íʾ¸ºÊý,Æä±àÂ뷽ʽΪ

? x N 2 N + ¡Æ i N ? 1 x i 2 i -x_N2^N+\sum^{N-1}_ix_i2^i ?xN?2N+i¡ÆN?1?xi?2i

ÆäÖÐ,×î¸ßλ x N x_N xN?Ϊ·ûºÅλ,µ± x N = 1 x_N=1 xN?=1ʱ,ÉÏʽ¼´Îª¸ºÊý,ÀýÈç1011±íʾ

? 1 ? 2 3 + 0 ? 2 2 + 1 ? 2 1 + 1 ? 2 0 = ? 5 -1\cdot2^3+0\cdot2^2+1\cdot2^1+1\cdot2^0=-5 ?1?23+0?22+1?21+1?20=?5

ËùÒÔ,ÔÚCÓïÑÔÖÐ,int a=-1,ÔòaµÄ¶þ½øÖƱàÂëΪ1111 1111 1111 1111¡£

errno.h

errno.h¶¨ÒåÁËÕûÊý±äÁ¿errno,ÓÃÓÚ±íÃ÷´íÎóÀàÐÍ,³ÌÐòÆô¶¯Ê±,errnoΪ0¡£

Èç¹û¸ÃÖµ²»Îª0,˵Ã÷·¢ÉúÁË´íÎó,²Ù×÷ϵͳ»á¶¨Òå¸÷ÖÖ´íÎóÂëËù¶ÔÓ¦µÄ´íÎóÀàÐÍ,ÀýÈç2±íʾδÕÒµ½Îļþ»òÎļþ¼ÐµÈ,¶ø´íÎóºÅËù¶ÔÓ¦µÄ´íÎóÀàÐͱ»·â×°ÔÚstring.hÖÐ,¿Éͨ¹ýº¯Êýstrerror()À´ËÑË÷¡£

#include<stdio.h>
#include<errno.h>
#include<string.h>

int main(){
	for(int i=0; i<10; i++)
		printf("%d:%s\n",i,strerror(i));
	return 0;
}

±àÒëÔËÐÐ

>gcc testErr.c
>a.exe
0:No error
1:Operation not permitted
2:No such file or directory
3:No such process
4:Interrupted function call
5:Input/output error
6:No such device or address
7:Arg list too long
8:Exec format error
9:Bad file descriptor

²âÊÔÒ»ÏÂ,Èôµ÷ÓÃÒ»¸ö²»´æÔÚµÄÎļþ»òÎļþ¼Ð,Æämainº¯Êý¸ÄΪ

int main(){
	FILE *fp;
	fp = fopen("test.txt","r");
	if (fp==NULL)
		printf("%d:%s",errno, strerror(errno));
	return 0;
}
>gcc errFile.c
>a.exe
2:No such file or directory

λÓÚstdio.hÖеĺ¯Êývoid perror(const char *str)¿ÉÒÔ°Ñ×Ö·û´®strдÈë±ê×¼´íÎóstderr,ÀýÈç

#include<stdio.h>
#include<string.h>
#include<errno.h>
int main(){
	FILE *fp;
	fp = fopen("test.txt","r");
	if (fp==NULL){
        perror("Error");
    }
	return 0;
}

Êä³öΪ

>gcc errFile.c
>a.exe
Error: No such file or directory

signal.h

signal.hÖж¨ÒåÁËһϵÁеÄÐźźê,ÈçÏÂÃæ´úÂëËùʾ¡£

#define	SIGHUP	1	//¹ÒÆð
#define	SIGINT	2	//ÖжÏ
#define	SIGQUIT	3	//Í˳ö
#define	SIGILL	4	//·Ç·¨Ö¸Áî
#define	SIGTRAP	5	//µ÷ÊÔÒì³£
#define	SIGABRT 6	//µ÷ÓÃabortʱ²úÉú,±íʾ³ÌÐòÒì³£ÖÕÖ¹
#define	SIGIOT	SIGABRT	//ʵÏÖÏà¹ØµÄÓ²¼þÒì³£
#define	SIGEMT	7	//EMTÖ¸Áî
#define	SIGFPE	8	//¸¡µãÔËËãʱµÄÒì³£
#define	SIGKILL	9	//ÎÞ·¨´¦Àí»òºöÂÔʱÖÐֹij¸ö½ø³Ì
#define	SIGBUS	10	//Ó²¼þÒì³£µ¼ÖµÄ×ÜÏß´íÎó
#define	SIGSEGV	11	//·Ç·¨ÄÚ´æ·ÃÎÊ
#define	SIGSYS	12	//·Ç·¨ÏµÍ³µ÷ÓÃ
#define	SIGPIPE	13	//ÔÚreaderÖÕÖ¹Ö®ºóдÈë¹ÜµÀ
#define	SIGALRM	14	//timer(alarm)»òinterval timer(setitimer)³¬Ê±
#define	SIGTERM	15	//ÇëÇóÖÐÖ¹½ø³Ì¶øÎÞ·¨µ÷ÓÃKillʱ
#define	SIGURG	16	/* urgent condition on IO channel */
#define	SIGSTOP	17	/* sendable stop signal not from tty */
#define	SIGTSTP	18	/* stop signal from tty */
#define	SIGCONT	19	//´Óstop»Ö¸´Ê±·¢ËÍ
#define	SIGCHLD	20	//×Ó½ø³Ì½áÊøʱ·¢¸øÆ丸½ø³Ì
#define	SIGCLD	20	/* System V name for SIGCHLD */
#define	SIGTTIN	21	/* to readers pgrp upon background tty read */
#define	SIGTTOU	22	/* like TTIN for output if (tp->t_local&LTOSTOP) */
#define	SIGIO	23	//IOÐźÅ
#define	SIGPOLL	SIGIO	//Ïò¿Éµ÷ÓÃÉ豸·¢ËÍÐÅϢʱ
#define	SIGXCPU	24	//CPUʱ¼ä¼ä¸ô³¬Ê±
#define	SIGXFSZ	25	//Îļþ×Ö½ÚÊý³¬ÏÞ
#define	SIGVTALRM 26	//interval timer(setitimer)³¬Ê±
#define	SIGPROF	27	//ÓÉSetitimerÖ¸¶¨µÄ¼ÆʱÆ÷·¢³ö
#define	SIGWINCH 28	//Öն˴°¿Ú±ä»¯
#define	SIGLOST 29	//×ÊÔ´¶ªÊ§
#define	SIGPWR  SIGLOST	//µôµç
#define	SIGUSR1 30	//Óû§×Ô¶¨Òå
#define	SIGUSR2 31	//Óû§×Ô¶¨Òå
  C++֪ʶ¿â ×îÐÂÎÄÕÂ
¡¾C++¡¿ÓÑÔª¡¢Ç¶Ì×Àà¡¢Òì³£¡¢RTTI¡¢ÀàÐÍת»»
ͨѶ¼µÄ˼·ÓëʵÏÖ£¨CÓïÑÔ)
C++PrimerPlus µÚÆßÕ º¯Êý-C++µÄ±à³ÌÄ£¿é£¨
Problem C: Ëã·¨9-9~9-12£ºÆ½ºâ¶þ²æÊ÷µÄ»ù±¾
MSVC C++ UTF-8±à³Ì
C++½ø½× ¶à̬ԭÀí
¼òµ¥stringÀàc++ʵÏÖ
ÎÒµÄÄê¶È×ܽá
¡¾CÓïÑÔ¡¿ÒÔÉîºñµØ»ùÖþΰ°¶¸ßÂ¥-»ù´¡Æª£¨Áù
cÓïÑÔ³£¼û´íÎóºÏ¼¯
ÉÏһƪÎÄÕ      ÏÂһƪÎÄÕ      ²é¿´ËùÓÐÎÄÕÂ
¼Ó:2022-06-01 15:00:47  ¸ü:2022-06-01 15:01:06 
 
¿ª·¢: C++֪ʶ¿â Java֪ʶ¿â JavaScript Python PHP֪ʶ¿â È˹¤ÖÇÄÜ Çø¿éÁ´ ´óÊý¾Ý Òƶ¯¿ª·¢ ǶÈëʽ ¿ª·¢¹¤¾ß Êý¾Ý½á¹¹ÓëËã·¨ ¿ª·¢²âÊÔ ÓÎÏ·¿ª·¢ ÍøÂçЭÒé ϵͳÔËά
½Ì³Ì: HTML½Ì³Ì CSS½Ì³Ì JavaScript½Ì³Ì GoÓïÑÔ½Ì³Ì JQuery½Ì³Ì VUE½Ì³Ì VUE3½Ì³Ì Bootstrap½Ì³Ì SQLÊý¾Ý¿â½Ì³Ì CÓïÑÔ½Ì³Ì C++½Ì³Ì Java½Ì³Ì Python½Ì³Ì Python3½Ì³Ì C#½Ì³Ì
ÊýÂë: µçÄÔ ±Ê¼Ç±¾ ÏÔ¿¨ ÏÔʾÆ÷ ¹Ì̬ӲÅÌ Ó²ÅÌ ¶ú»ú ÊÖ»ú iphone vivo oppo СÃ× »ªÎª µ¥·´ ×°»ú ͼÀ­¶¡

360ͼÊé¹Ý ¹ºÎï Èý·á¿Æ¼¼ ÔĶÁÍø ÈÕÀú ÍòÄêÀú 2024Äê5ÈÕÀú -2024/5/14 2:48:24-

ͼƬ×Ô¶¯²¥·ÅÆ÷
¡ýͼƬ×Ô¶¯²¥·ÅÆ÷¡ý
TxTС˵ÔĶÁÆ÷
¡ýÓïÒôÔĶÁ,С˵ÏÂÔØ,¹ÅµäÎÄѧ¡ý
Ò»¼üÇå³ýÀ¬»ø
¡ýÇáÇáÒ»µã,Çå³ýϵͳÀ¬»ø¡ý
ͼƬÅúÁ¿ÏÂÔØÆ÷
¡ýÅúÁ¿ÏÂÔØͼƬ,ÃÀŮͼ¿â¡ý
  ÍøÕ¾ÁªÏµ: qq:121756557 email:121756557@qq.com  ITÊýÂë