ÒýÑÔ
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 1024 | setbuf º¯Êý»º³åÇø×Ö½ÚÊý | __BUFSIZ__ | FOPEN_MAX 20 | ϵͳ¿Éͬʱ´ò¿ªµÄÎļþÊýÁ¿ | __FOPEN_MAX__ | FILENAME_MAX 1024 | ÎļþÃû×î´ó³¤¶È | __FILENAME_MAX__ | L_tmpnam FILENAME_MAX | tmpnam ´´½¨µÄÁÙʱÎļþÃûµÄ×î´ó³¤¶È | __L_tmpnam__ | TMP_MAX 26 | tmpnam ¿ÉÉú³É×î¶à¶ÀÁ¢ÎļþÃû | |
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¡£
·µ»ØÀàÐÍ | º¯Êý | ¹¦ÄÜ |
---|
int | fclose | ¹Ø±Õstream,ˢлº³åÇø | int | fflush | Ë¢ÐÂstreamµÄÊä³ö»º³åÇø | int | ferror | ²âÊÔstreamµÄ´íÎó±êʶ·û |
Èç¹ûÔÚûÓÐÍê³ÉдÈëµÄÇé¿öϵ÷ÓÃclose ,¿ÉÄÜ»áÖÂʹÊý¾Ý¶ªÊ§,¹Êstdio.h ÖÐÌṩÁËfflush º¯Êý,ÓÃÓÚÇ¿ÖÆ½«»º³åÇøµÄÄÚÈÝдÈëÎļþ¡£¶øfclose Ôò×ÛºÏÁ˶þÕߵŦÄÜ,ÏÈflush,ÔÙclose¡£
FILE½á¹¹Ìå
FILE ÊÇCÓïÑÔ±ê×¼¿â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 ´´½¨¶þ½øÖÆÎļþ¡£
ΪÁËÀí½âÕâЩ×ֶεĺ¬Òå,¿ÉÒÔдһ¸öСÀý×Ó
#include<stdio.h>
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");
printFILE(fp);
char buf[20];
fread(buf,1,5,fp);
printFILE(fp);
fclose(fp);
printFILE(fp);
return 0;
}
µÃµ½ÆäÊä³öÈçÏÂ,ΪÁ˱ãÓÚÔĶÁ,ÓÃ// ºÍ/**/ ¶ÔÊä³ö½øÐÐ×¢ÊÍ
>gcc test.c
>a.exe
fp->_ptr=(null)
fp->_cnt=0
fp->_base=(null)
fp->_flag=1
fp->_file=3
fp->_charbuf=0
fp->_bufsiz=0
fp->_tmpfname=(null)
--------------------------------------------------------------------------
fp->_ptr=ude<stdio.h>
void printFILE(FILE *fp){
printFILE(fp);
return 0;
}
LE(fp);
return 0;
}
fp->_cnt=665 #µ±Ç°»º³åÇøµÄÏà¶ÔλÖÃÊÇ65
fp->_base=#include<stdio.h> #Ö¸ÏòÎļþ³õʼλÖõÄÖ¸Õë
void printFILE(FILE *fp){
printFILE(fp);
return 0;
}
LE(fp);
return 0;
}
fp->_flag=9
fp->_file=3
fp->_charbuf=0
fp->_bufsiz=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
#define __SERR 0x0040
#define __SMBF 0x0080
#define __SAPP 0x0100
#define __SSTR 0x0200
#define __SOPT 0x0400
#define __SNPT 0x0800
#define __SOFF 0x1000
#define __SMOD 0x2000
#define __SALC 0x4000
#define __SIGN 0x8000
_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 ,˵Ã÷¾ùÔÚ×¢ÊÍÖС£
#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");
char buf[20];
fread(buf,1,20,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);
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);
return 0;
}
Êä³ö½á¹ûΪ
>gcc test.c
E:\Documents\00\1217>a.exe
printf the first 20 bytes:
#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;
½ÓÏÂÀ´×öÒ»¸ö¼òµ¥µÄ²âÊÔ
#include <string.h>
#include <stdio.h>
int main(void)
{
fpos_t pos;
FILE* fp = fopen("pos.c", "r");
fgetpos(fp, &pos);
printf("file pointer : %ld\n", pos);
fseek(fp,10,0);
fgetpos(fp, &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 µÄ²Ù×÷
#include <string.h>
#include <stdio.h>
int main(void)
{
fpos_t pos;
FILE* fp = fopen("pos.c", "r");
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ΪÎļþ½áÊø±êʶ·û¡£
·µ»ØÀàÐÍ | | ¹¦ÄÜ |
---|
void | clearerr | Çå³ýstreamµÄÎļþ½áÊøºÍ´íÎó±êʶ·û | int | feof | ·µ»ØstreamµÄÎļþ½áÊø±êʶ·û,ÈôδÉèÖÃ,Ôò·µ»Ø0 | long int | ftell | ·µ»ØstreamµÄÎļþλÖÃ,Èç¹û·¢Éú´íÎó,Ôò·µ»Ø-1L,È«¾Ö±äÁ¿errno±»ÉèÖÃΪһ¸öÕýÖµ¡£ | void | rewind | ÉèÖÃÎļþλÖÃΪstreamµÄ¿ªÍ· | int | fgetc
getc | ´Óstream»ñÈ¡ÏÂÒ»¸ö×Ö·û,²¢°ÑλÖñêʶ·ûÍùÇ°ÒÆ¶¯ |
»º´æ
ÔÚ´ò¿ªÎļþºó»¹Ã»ÓÐ×öÆäËû²Ù×÷µÄʱºò,¿ÉÒÔͨ¹ýssetvbuf À´ÉèÖûº³å¸ñʽ,ÆäÉùÃ÷Ϊ
int setvbuf(FILE *stream, char *buffer, int mode, size_t size)
ÆäÖÐstream ΪÎļþÁ÷;buffer Ϊ·ÖÅ䏸Óû§µÄ»º³å;size Ϊ»º³åµÄ×Ö½ÚÊý;mode Ϊ»º³åģʽ,ÓÐÈýÖÖ
ºê | Öµ | Àà±ð | ˵Ã÷ |
---|
_IOFBF | 0 | È«»º³å | Êä³öʱ,Êý¾ÝÔÚ»º³åÌîÂúʱ±»Ò»´ÎÐÔдÈë ÊäÈëʱ,»º³åÔÚÇëÇóÊäÈëÇÒ»º³åΪ¿Õʱ±»Ìî³ä¡£ | _IOLBF | 1 | Ðлº³å | Êä³öʱ,ÔÚ»»Ð䦻ò»º³åÌîÂúʱдÈëÊý¾Ý ÊäÈëʱ,»º³åÖÁÏÂÒ»¸ö»»Ðзû | _IONBF | 2 | ÎÞ»º³å | ²»Ê¹Óûº³å¡£I/O²Ù×÷¼´Ê±Ð´Èë,ºöÂÔbufferºÍsize |
setbuf ÊÇsetvbuf µÄÒ»¸öÌØÀý,ÆäÖÐmode Ϊ_IONBF ,size Ϊ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 Óйصĺ¯ÊýÈçϱíËùʾ
get | fget | put | fput |
---|
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ÖÐ,ÒÔ±ã½ÓÏÂÀ´±»¶ÁÈ¡¡£
½ÓÏÂÀ´×öһЩ¼òµ¥µÄʾÀý
#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",fPI | 3.1415927410 | float Ò»°ãÖ»ÓÐ6λ¾«¶È | "%.10f",dPI | 3.1415926536 | double ¿É±£Ö¤15λ¾«¶È | "%010.5f",dPI | 0003.14159 | 5λ¾«¶È,10¸ö×Ö·û,×ó²à²¹0 | "%015.5E",dPI*1e5 | 0003.14159E+005 | widthÖ¸×Ö·û¸öÊý | "%#010.0f",dPI*1e5 | 000314159. | # Ç¿ÖÆÊä³öСÊýµã | "%+f",dPI | +3.141593 | + Ç¿ÖÆÊä³öÕýºÅ | "%.2G",dPI | 3.1 | | "%.2G",dPI*1e10 | 3.1E+010 | ´ËʱÏÔÈ»Eģʽ¸ü¶Ì | "%010.2G\n%010.4G",dPI | 00000003.1 000003.142 | ĬÈÏÓÒ¶ÔÆë | "%-010.2G\n%-010.4G",dPI | 3.1 3.142 | - ģʽÏÂ×ó¶ÔÆë,ËùÒÔ0ûÁË |
ÕûÐͲâÊÔ
printf | Êä³ö | ˵Ã÷ |
---|
%u,IPI | 31415926 | ×÷ΪÎÞ·ûºÅÕûÐÍÊä³ö | %+d,IPI | 31415926 | + Ä£Ê½Ç¿ÖÆÏÔʾÕýºÅ | %o,IPI | 167657166 | Êä³öΪ8½øÖÆ | %x,IPI | 1df5e76 | Êä³öΪʮÁù½øÖÆ | %#X,IPI | 0X1DF5E76 | # ģʽÏÂÏÔʾ0X |
ÔÚstdio ÖÐ,¶¨ÒåÁËһϵÁÐprintf º¯ÊýºÍscanf º¯Êý,ͨ¹ýÔÚÇ°ÃæÌí¼ÓÒ»¸ö×ÖĸÀ´±íʾ²»Í¬µÄÐÐΪ:
Êä³öλÖà | | ʹÓòÎÊýÁбí | ¶ÁÈ¡ÊäÈë |
---|
±ê×¼Êä³ö(ÆÁÄ») | printf | vprintf | scanf | stream | fprintf | vfprintf | fscanf | ×Ö·û´® | sprintf | vsprintf | sscanf |
ΪÁ˱ãÓÚÔĶÁ,ÏÂÃæÄ¬ÈÏ
#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¡£
#include <stdio.h>
#include <stdlib.h>
void funcA (){
printf("call from atexit\n");
}
int main (){
atexit(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 ,¹ËÃû˼Òå,¾ÍÊǵ÷ÓÃϵͳÃüÁîÐÐ,ÆäÊäÈëΪ×Ö·û´®,È»ºó°ÑÕâ¸ö×Ö·û´®Êä³ö¸øÃüÁîÐÐ,ÈÃÃüÁîÐÐÖ´ÐС£
ΪÁ˲âÊÔÆäÌØÐÔ,¿ÉÒÔ×öÒ»¸öС³ÌÐò
#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;
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
ÓйØÄ³¸öÃüÁîµÄÏêϸÐÅÏ¢,Çë¼üÈë HELP ÃüÁîÃû
ASSOC ÏÔʾ»òÐÞ¸ÄÎļþÀ©Õ¹Ãû¹ØÁª¡£
ATTRIB ÏÔʾ»ò¸ü¸ÄÎļþÊôÐÔ¡£
BREAK ÉèÖûòÇå³ýÀ©Õ¹Ê½ CTRL+C ¼ì²é¡£
BCDEDIT ÉèÖÃÆô¶¯Êý¾Ý¿âÖеÄÊôÐÔÒÔ¿ØÖÆÆô¶¯¼ÓÔØ¡£
Óйع¤¾ßµÄÏêϸÐÅÏ¢,Çë²ÎÔÄÁª»ú°ïÖúÖеÄÃüÁîÐвο¼¡£
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 ÖеÄ×Ö·û´®×ª»»º¯ÊýÈçϱíËùʾ
·µ»ØÖµÀàÐÍ | ¼òµ¥ | ¸ß¼¶ |
---|
double | atof(cSTR) | strtod(cSTR, END) | int | atoi(cSTR) | | long int | atol(cSTR) | strtol(cSTR, END, int base) | unsigned long int | | strtoul(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תΪpwcssize_t wcstombs(char *str, const wchar_t *pwcs, size_t n) :pwcsתΪstrint wctomb(char *str, wchar_t wchar) :wcharתΪstrint 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 Ò²ÏԵø߼¶¸ÐÊ®×ã,ÏÂÃæ¾Ù¸öÀý×ÓÀ´²âÊÔÒ»ÏÂ
#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 ¡£
¾Ù¸öÀý×Ó
#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;
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]);
}
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]);
}
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) ,½«±»·Ö¸îºóµÄ×Ö·û´®ÖðÒ»µ÷³ö¡£
#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)
×öÒ»¸ö²âÊÔ
#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-122 | 30-39, 41-5A, 61-7A | isalpha | ×Öĸ | 65-90, 97-122 | 41-5A, 61-7A | isupper | ´óд×Öĸ | 65-90 | 41-5A | islower | Сд×Öĸ | 97-122 | 61-7A | iscntrl | ¿ØÖÆ×Ö·û | 0-31,127 | 00-1F, 7F | isdigit | Ê®½øÖÆÊý×Ö | 48-57 | 30-39 | isxdigit | Ê®Áù½øÖÆÊý×Ö | 48-57, 48-53, 97-102 | 30-39,41-46, 61-66 | isgraph | ͼÐÎ×Ö·û | 33-126 | 21-7E | isprint | ¿É´òÓ¡ | 32-126 | 20-7E | ispunct | ±êµã·ûºÅ | 33-47, 58-64 91-96, 123-126 | 21-2F, 3A-40 5B-60, 7B-7E | isspace | ¿Õ°××Ö·û | 9-13,32 | 09-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¸ö×Ö·ûΪ¿ØÖÆ·û
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F |
---|
0 | NUL | SOH | STX | ETX | EOT | ENQ | ACK | BEL | BS | HT | LF | VT | FF | CR | SO | SI | 1 | DLE | DC1 | DC2 | DC3 | DC4 | NAK | SYN | ETB | CAN | EM | SUB | ESC | FS | GS | RS | US |
32-126Ϊ¿É´òÓ¡×Ö·û,ÆäÖÐ20 Ϊ¿Õ¸ñ,´óСд×ÖĸÕýºÃ²îÁË0x20 ¡£
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F |
---|
2 | | ! | " | # | $ | % | & | ¡¯ | ( | ) | * | + | , | - | . | / | 3 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | : | ; | < | = | > | ? | 4 | @ | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | 5 | P | Q | R | S | T | U | V | W | X | Y | Z | [ | \ | ] | ^ | _ | 6 | ` | a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | 7 | p | q | r | s | t | u | v | w | x | y | z | { | | | } | ~ | 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;
int tm_min;
int tm_hour;
int tm_mday;
int tm_mon;
int tm_year;
int tm_wday;
int tm_yday;
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 ´ú±í½«ÒªÉèÖõĺ¯ÊýÀà±ð,ÆäÊäÈë²ÎÊý°üÀ¨
Öµ | ºê | ˵Ã÷ | Ó°ÏìµÄº¯Êý |
---|
0 | LC_ALL | ÏÂÃæµÄËùÓÐÑ¡Ïî | | 1 | LC_COLLATE | ×Ö·û´®±È½Ï | strcoll ºÍ strxfrm | 2 | LC_CTYPE | ×Ö·û·ÖÀàºÍת»» | ËùÓÐ×Ö·ûº¯Êý | 3 | LC_MONETARY | »õ±Ò¸ñʽ | localeconv() | 4 | LC_NUMERIC | СÊýµã·Ö¸ô·û | localeconv() | 5 | LC_TIME | ÈÕÆÚºÍʱ¼ä¸ñʽ | strftime() | 6 | LC_MESSAGES | ϵͳÏìÓ¦ | |
ÆäÖÐ,localeconv() º¯Êý±»·â×°ÔÚlocale.h ÖÐ,Æä·µ»ØÖµÊÇÒ»¸ölconv ½á¹¹,Ö÷ÒªÓÃÓÚÃèÊö»õ±ÒµÄ±íʾ·½·¨,ÿ¸ö×ֶεĺ¬ÒåÔÚÏÂÃæµÄ×¢ÊÍÖÐ˵Ã÷¡£ÔÚ×¢ÊÍÖÐ,cs ±íʾµ±Ç°ÇøÓòµÄ»õ±Ò·ûºÅ¡£
typedef struct {
char *decimal_point;
char *thousands_sep;
char *grouping;
char *int_curr_symbol;
char *currency_symbol;
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;
char p_sep_by_space;
char n_cs_precedes;
char n_sep_by_space;
char p_sign_posn;
char n_sign_posn;
} lconv
ÆäÖÐ,grouping ºÍmon_grouping ¾ùΪ×Ö·û´®,·Ö±ð±íʾÔÚ³£¹æÊýÖµºÍ»õ±ÒÖÐÿ×éÊý×Ö´óС¡£×Ö·û´®ÖÐÿ¸ö×Ö·û¶¼´ú±íÒ»¸öÕûÊý,ÓÃÒÔÖ¸¶¨µ±Ç°×éµÄλÊý¡£
µ±Ç°ÇøÓòµÄ»õ±Ò·ûºÅcs Óë»õ±ÒÖµÖ®¼äµÄÅŰ淽ʽΪ
| ֵΪ1 | ֵΪ0 |
---|
p_cs_precedes | csÔÚÕý»õ±Òֵ֮ǰ | csÔÚÕý»õ±ÒÖµÖ®ºó | p_sep_by_space | csºÍÕý»õ±ÒÖµÖ®¼äÓÿոñ | csºÍÕý»õ±ÒÖµÖ®¼ä²»Ê¹Óÿոñ | n_cs_precedes | csÔÚ¸º»õ±Òֵ֮ǰ | csÔÚ¸º»õ±ÒÖµÖ®ºó¡£ | n_sep_by_space | csºÍ¸º»õ±ÒÖµÖ®¼äʹÓÿոñ | csºÍ¸º»õ±ÒÖµÖ®¼ä²»Ê¹Óÿոñ |
»õ±ÒÖÐÕý¸ººÅµÄλÖÃͨ¹ýp_sign_posn ºÍn_sign_posn À´µ÷½Ú,¶þÕß¾ùÓÐ5¸öȡֵ¡£
¶ÔÓÚ-1ÃÀÔª,Æän_sign_posn ȡֵ´Ó0-5,n_cs_precedes ·Ö±ðΪ0,1 ʱ,±íʾ·½·¨·Ö±ðÈçÏÂ
| 0 | 1 | 2 | 3 | 4 |
---|
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
#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();
}
}
assert µÄºÃ´¦ÊÇ,¿ÉÒÔ×Ô¶¯·µ»Ø³ö´íµÄÐÐÊý,²¢ÇÒÄܹ»Í¨¹ýdefine NDEBUG ½«Æä½ûÖ¹¡£²»×ãÖ®´¦ÔÚÓÚ,Ö»ÄÜÔÚÔËÐÐʱִÐС£C11ÍÆ³öÁËÒ»¸öеĺ¯Êý_Static_assert ,¹ËÃû˼ÒåΪ¾²Ì¬¶ÏÑÔ,¿ÉÒÔÔÚ±àÒëʱִÐÐ:
#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ÓïÑԶԿɱä²ÎÊýµÄÖ§³Ö,ÏȾÙÒ»¸ö¼ò¶ÌµÄÀý×Ó
#include <stdarg.h>
#include <stdio.h>
void printIntList(int N, ...){
va_list args;
va_start(args, N);
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_t ,wchar_t ºÍptrdiff_t ¡£
ÆäÖÐsize_t ÊÇsizeof µÄ½á¹û,Ò»°ãÊÇlong unsigned int ;wchar_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);
long int y[20];
ptrdiff_t ny = &y[5]-&y[1];
printf("%d\n", ny);
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 µÄ·µ»ØÖµ¡£
½ÓÏÂÀ´¾ÙÒ»¸ö×îÖ±¹ÛµÄÀý×Ó
#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 ÀàÐÍ:
float | double | long double | ¼òҪ˵Ã÷ |
---|
FLT_MANT_DIG | DBL_MANT_DIG | LDBL_MANT_DIG | b ½øÖÆÏÂM µÄ×î´ó³¤¶È | FLT_DIG(
¡Ý
6
\ge6
¡Ý6) | DBL_DIG(
¡Ý
10
\ge10
¡Ý10) | LDBL_DIG(
¡Ý
10
\ge10
¡Ý10) | СÊýµãºó¾«È·Êý×ÖλÊý | FLT_MIN_EXP | DBL_MIN_EXP | LDBL_MIN_EXP | b ½øÖÆÏÂe µÄ×îСֵ | FLT_MAX_EXP | DBL_MAX_EXP | LDBL_MAX_EXP | b ½øÖÆÏÂe µÄ×î´óÖµ | FLT_MIN_10_EXP | DBL_MIN_10_EXP | LDBL_MIN_10_EXP | Ê®½øÖÆÏÂ
e
min
?
¡Ü
?
37
e_{\min}\le-37
emin?¡Ü?37 | FLT_MAX_10_EXP | DBL_MAX_10_EXP | LDBL_MAX_10_EXP | Ê®½øÖÆÏÂ
e
max
?
¡Ý
37
e_{\max}\ge37
emax?¡Ý37 | FLT_MAX | DBL_MAX | LDBL_MAX | ¸¡µãÊý×î´óÖµ
?
1
0
37
\geqslant10^{37}
?1037 | FLT_MIN | DBL_MIN | LDBL_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¡£
ÀàÐÍ | ×î´óÖµ | ×îСֵ | Ò»°ãȡֵ |
---|
char | CHAR_MAX | CHAR_MIN | | singed char | SCHAR_MAX | SCHAR_MIN |
¡À
127
\pm127
¡À127 | unsinged char | UCHAR_MAX | |
255
255
255 | short int | SHRT_MAX | SHRT_MIN |
¡À
32767
\pm32767
¡À32767 | unsigned
short int | USHRT_MAX | |
65536
65536
65536 | int | INT_MAX | INT_MIN |
¡À
32767
\pm32767
¡À32767 | unsigned int | UINT_MAX | |
65536
65536
65536 | long int | LONG_MAX | LONG_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 int | LLONG_MAX | LLONG_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
#define SIGIOT SIGABRT
#define SIGEMT 7
#define SIGFPE 8
#define SIGKILL 9
#define SIGBUS 10
#define SIGSEGV 11
#define SIGSYS 12
#define SIGPIPE 13
#define SIGALRM 14
#define SIGTERM 15
#define SIGURG 16
#define SIGSTOP 17
#define SIGTSTP 18
#define SIGCONT 19
#define SIGCHLD 20
#define SIGCLD 20
#define SIGTTIN 21
#define SIGTTOU 22
#define SIGIO 23
#define SIGPOLL SIGIO
#define SIGXCPU 24
#define SIGXFSZ 25
#define SIGVTALRM 26
#define SIGPROF 27
#define SIGWINCH 28
#define SIGLOST 29
#define SIGPWR SIGLOST
#define SIGUSR1 30
#define SIGUSR2 31
|