(參考:https://www.jb51.net/article/124594.htm)
#include<stdio.h> 或 #include"stdio.h"
用#include<stdio.h>形式時,編譯系統從存放C編譯系統的子目錄中去找所包含的文件stdio.h,這稱爲標準方式。
用#include"stdio.h"形式時,編譯系統先在用戶的當前目錄(用戶存放源程序文件的子目錄)中尋找stdio.h,若找不到,再按標準方式查找。如果該頭文件不在當前目錄,可加入路徑如(#include "C:\temp\file1.h")。
不完全統計,C語言標準庫中的頭文件有15個之多,所以我主要介紹常用的這四個頭文件stdio.h ,string.h ,math.h ,stdlib.h ,以後用到其他的再做補充。下面上乾貨:
1.<stdio.h>:定義了(standard input & output的縮寫)輸入輸出函數、類型以及宏,函數幾乎佔了標準庫的1/3。
(1)文件訪問。
1 |
|
以mode模式打開地址爲'filename'的文件,並返回文件指針。
訪問模式主要是“r”:只讀; “w” :只寫,並刪除已有內容; “a”:追加,在末尾追加;
“r+”, “w+”:讀寫; “a+”追加,上述結尾加“b”:二進制文件操作。
注意:其中r是打開文件,而w會創建(如果文件不存在); w會覆蓋原有內容,a則是在原有文件末尾追加。
FILE *fp ; / 定義一個指向文件的指針變量fp
fp = fopen("a1","r"); / 將fopen函數的返回值(a1文件信息區的起始地址)賦給指針變量fp
表示要打開名字爲“a1”的文件,使用文件方式爲"r"讀入。
2 |
|
fclose(文件指針); 釋放緩衝區數據,關閉流。如:fclose(fp); 前面曾把打開文件(用fopen函數)時函數返回的指針賦給了fp,現在把fp指向的文件關閉,此後fp不再指向該文件。當成功執行操作,則返回值爲0,否則返回EOF(-1)。
下面兩個沒太用過:
1 |
|
以mode模式打開地址爲'filename'的文件,並將該文件與流f2關聯。
1 |
|
將已寫到緩衝區但未寫入文件中的所有數據寫入文件中。
(2)二進制輸入/輸出
1 |
|
從f中讀取n個長度爲size的對象,並放入ptr指向的數組中。
1 |
|
從ptr指向數組中讀取n個長度爲size的對象,並寫入f中。
注意:要注意write與read的對象,讀和寫都是針對文件流f的。
(3)非格式化輸入/輸出
1 |
|
返回流f 的下一個字符,到達文件末尾/發生錯誤,則返回EOF。
1 |
|
將字符c輸入到流f中。
1 |
|
將f中下n-1個字符讀入到數組s中。遇到換行符,則終止。
1 |
|
將字符串s輸出到流中。
1 |
|
將c寫回到f中。
(4)格式化輸入/輸出
按一定格式轉輸出。
1 2 |
|
注意:1,不加f/s,則是格式字符串標準輸入/出函數,輸入/出到終端/屏幕;
printf(格式控制,輸出形式); 例:printf( "%d , %c\n" , i , c);
printf(const char *format,...)
2,加s,輸入/出到字符串中。sprintf(char *s,const char *format,...),
3,加f,輸入/出到文件流中。 fprintf(FILE *f,const char *format,...)
scanf(格式控制,地址表列); 例:scanf("a=%f,b=%f,c=%f" ,&a, &b ,&c);
putchar (c); 輸出一個字符
getchar ( ); 輸入一個字符
(5)文件定位
1 |
|
返回當前指針位置。錯誤時返回-1L。
1 |
|
將當前流f指針位置設置到:origin後offset個字符處。origin有:SEEK_SET:文件起始位置;SEEK_CUR指針當前位置,SEEK_END:文件結束位置。
1 |
|
指針返回文件開始位置,相當於:fseek(f,0L,SEEK_SET)
不常用:
1 |
|
將指針當前位置記錄到*p中,以供fsetpos函數使用。
1 |
|
指針位置指向*p。
(6)錯誤處理與文件操作
1 |
|
指示文件結束,一直返回0,結束時返回非0值。
1 |
|
如果設置了與f相關的錯誤指示符,則返回一個非0值。
1 |
|
刪除指定位置的文件。
1 |
|
改文件名,否則返回非0值。
1 |
|
建立臨時文件,‘wb+'模式,在被關閉或程序正常結束時自動刪除
2. <string.h> 分成兩組,一組str開頭,一組mem開頭(該組函數在<memory.h>中也有定義,不是所有編譯器都有)
(1)str
puts(字符數據); 輸出字符串函數
例:char str[]="china"; puts(str);
gets(字符數組); 輸入字符串函數
例:gets(str);
1 |
|
將字符串src複製到字符串dest中(包括'\0'),返回dest
1 |
|
將src中的前n個字符複製到dest中,返回dest,不夠n個則補‘\0'
|
src連接到dest後;src 中前n個字符連接到dest後。
例: 如果str1=str2,則函數值爲0; 如果str1>str2,則函數值爲正; 如果str1<str2,則函數值爲負。 如: if(strcmp(str1,str2)=0)
|
strlen(字符數組); //測字符串長度的函數,字符串實際長度(不包括'\0')
例:char str[10]="china"; printf("%d",strlenn(str)) ; 輸出的結果不是10也不是6,而是5
strlwr(字符串); //轉換爲 小寫 的函數,將字符串中的大寫字母轉換爲小寫字母
strupr(字符串); //轉換爲 大寫 的函數,將字符串的小寫字母轉換爲大寫字母
不常見 size_t strcspn (const char *s1, const char *s2); char * strdup (const char *s); char * strerror(int errnum);
(2)mem
1 |
|
將字符串ct中的前n個字符拷貝到s中,並返回s。
1 2 |
|
void *memset(void *s, int c, size_t n);
函數解釋:將s中當前位置後面的n個字節 (typedef unsigned int size_t )用 c 替換並返回 s 。
memset:作用是在一段內存塊中填充某個給定的值,它是對較大的結構體或數組進行清零操作的一種最快方法 [1]。
memset()函數原型是extern void *memset(void *buffer, int c, int count) buffer:爲指針或是數組,c:是賦給buffer的值,count:是buffer的長度
將s中的前n個字符替換成c,並返回s。
1 |
|
將cs前n個字符與ct進行比較,cs<ct,返回負數;否則返回0
1 |
|
返回指向c在cs中第一次出現的位置指針。
3.<math.h>一些數學函數
求絕對值
1 2 3 |
|
所有返回值均爲double,三角函數角度用弧度表示,x,y均爲double
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
|
4.<stdlib.h>數值轉換、內存分配等問題。
1 |
|
產生一個0~32767之間的隨機整數。
void *malloc(unsigned int size);
作用是在內存的動態存儲區中分配一個長度爲size(不允許爲負數)的連續空間。此函數的值(即“返回值”)是分配區域的第一個字節的地址,或者說,此函數是一個指針型函數,不指向任何類型的數據,只提供一個地址,返回的指針指向該分配域的開頭位置,如內存空間不足則返回空指針NULL。如:
malloc(100); //開闢100字節的心事分配域,函數值爲其第一個字節的地址
void *calloc(unsiggned n,unsigned size);
作用是在內存的動態存儲區分配n個長度爲size的連續空間,這個空間一般比較大,足以保存一個數組,可以爲一維數組開闢動態存儲空間,n爲數組元素個數,每個元素長度爲size,這是動態數組。函數返回指向所分配域的起始位置的指針,如果分配不成功則返回NULL。如:
p=calloc(50,4); //開闢50x4個字節的臨時分匹配域,把起始地址賦給指針變量p
void free(void *p);
作用是釋放指針變量p所指向的動態空間(p爲malloc,realloc,calloc最近一次所開闢的內存),使這部分空間能重新被其他變量使用。如;
free(p); //釋放指針變量p所指向的已分配的動態空間 free函數無返回值
void *realloc(void *p,uunsigned int size);
如果已經通過malloc或calloc函數獲得了動態空間,想改變其大小,可以用realloc函數重新分配,用realloc函數將p所指向的動態空間的大小改爲size,如果重分配不成功,則返回NULL。如:
realloc(p,50); //將p所指向的已分配的動態空間改爲50字節
1 |
|
使程序非正常終止。
1 |
|
使程序正常終止。