JNI入門之C C 基礎五

2021-08-20 09:38:30 字數 4508 閱讀 7909

聯合體(共用體)

不同型別的變數共同占用一段記憶體(相互覆蓋),聯合變數任何時刻只有乙個成員存在,節省記憶體

聯合體變數的大小=最大的成員所佔的位元組數

union  myvalue{

int x;

int y;

double z;

void main(){

union myvalue d1;

d1.x = 90;

d1.y = 100;

d1.z = 23.8; //最後一次賦值有效

printf("%d,%d,%lf\n",d1.x,d1.y,d1.z);

system("pause");

列舉值預設從 0 開始,往後逐個加 1(遞增)

列舉的值,必須是大括號中的值

enum day

monday = 0,//這裡也可以設定其他整數

tuesday,

wednesday,

thursday,

friday,

saturday,

sunday

常用函式

執行字元/文字行/二進位制i/o的函式

資料型別

輸入輸出

描述字元

getchar

putchar

讀取(寫入)單個字元

文字行gets

scanf

puts

printf

文字行未格式化的輸入(輸出)

格式化的輸入(輸出)

二進位制資料

fread

fwrite

讀取(寫入)二進位制資料

1.      只用於stdin或stdout

2.      隨作為引數的流使用

3.      使用記憶體中的字串而不是流

常用讀寫模式:

"r"(唯讀) 

為輸入開啟乙個文字檔案,不存在則失敗

"w"(只寫)

為輸出開啟乙個文字檔案,不存在則新建,存在則刪除後再新建

"a"(追加)

向文字檔案尾部增加資料,不存在則建立,存在則追加

'rb"(唯讀) 

為輸入開啟乙個二進位制檔案,不存在則失敗

"wb"(只寫) 

為輸入開啟乙個二進位制檔案,不存在則新建,存在則刪除後新建

"ab"(追加) 

向二進位制檔案尾部增加資料,不存在則建立,存在則追加

"r+"(讀寫) 

為讀寫開啟乙個文字檔案,不存在則失敗

"w+" (讀寫)

為讀寫建立乙個新的文字檔案,不存在則新建,存在則刪除後新建

"a+"(讀寫)

為讀寫開啟乙個文字檔案,不存在則建立,存在則追加

"rb+"(讀寫)

為讀寫開啟乙個二進位制檔案,不存在則失敗

"wb+"(讀寫)

為讀寫建立乙個新的二進位制檔案,不存在則新建,存在則刪除後新建

"ab+"(讀寫)

為讀寫開啟乙個二進位制檔案,不存在則建立,存在則追加

函式名: fopen

功  能: 開啟乙個流,失敗返回null,file並不是指檔案,而是乙個與檔案相關聯的流。

用  法: file *fopen(char *filename, char *type);

函式名: fclose

功  能: 關閉乙個流

用  法: int fclose(file *stream);

函式名: fgets

功  能: 從流中讀取一字串

用  法: char *fgets(char *string, int n, file *stream);

引數:string: 字元型指標,指向儲存讀入資料的緩衝區的位址。

n: 從流中讀入n-1個字元

stream : 指向讀取的流。

返回值:

1. 當n<=0 時返回null,即空指標。

2. 當n=1 時,返回空串"".

3. 如果讀入成功,則返回緩衝區的位址。

4. 如果讀入錯誤或遇到檔案結尾(eof),則返回null.

函式名: fputs

功  能: 送乙個字元到乙個流中

用  法: int fputs(char *string, file *stream);

引數:string為將要寫入的字串,stream為檔案流指標。

返回值:成功返回非負數,失敗返回eof。

**示例:

在c語言中,檔案路徑會被寫作字串形式,但是由於c語言的字串規則中,\字元是轉義字元的引導,所以』\』要寫成』\\』

讀取字串

#define _crt_secure_no_warnings

#include

#include

#include "string.h"

void main() {

char* path = "e:\\files\\friends.txt";

file *fp = fopen(path, "r");

if (fp == null)

printf("檔案讀取失敗");

getchar();

return;

char re[50];

while (fgets(re,50,fp))

printf("%s", re);

fclose(fp);

getchar();

寫入字串

void main() {

char* path = "e:\\files\\friends.txt";

file *fp = fopen(path, "w");

if (fp == null)

printf("檔案寫入失敗");

getchar();

return;

char * wr = "無敵是多麼寂寞!";

fputs(wr, fp);

fclose(fp);

getchar();

計算機的檔案儲存在物理上都是二進位制

,文字檔案和二進位制之分,其實是乙個邏輯之分

,c讀寫文字檔案與二進位制檔案的差別僅僅體現在回車換行符

,寫文字時,每遇到乙個

'\n'

,會將其轉換成

'\r\n'(

回車換行

),讀文字時,每遇到乙個

'\r\n'

,會將其轉換成

'\n'

函式名: fread

功  能: 從乙個流中讀資料fread()函式每次從stream中最多讀取nitems個單元,每個單元大小為size個位元組,將讀取的資料放到buffer;檔案流的位置指標後移size * nitems位元組。

用  法: int fread(void *ptr, int size, int nitems, file *stream);

引數: ptr為接收資料的位址,size為乙個單元的大小,nitems為單元個數,stream為檔案流。

返回值:返回實際讀取的單元個數。如果小於nitems,則可能檔案結束或讀取出錯;如果size或nitems為0,則返回0。

函式名: fwrite

功  能: 寫內容到流中

用  法: int fwrite(void *ptr, int size, int nitems, file *stream);

複製檔案:

void main() {

char* path = "e:\\files\\liuyan.png";

char* path_new = "e:\\files\\liuyan_new.png";

file *fp = fopen(path, "rb");

file *fp_new = fopen(path_new, "wb");

int buf[50];

int len = 0;

while ((len = fread(buf,sizeof(int),50,fp)) != 0)

fwrite(buf, sizeof(int), len, fp_new);

fclose(fp);

fclose(fp_new);

getchar();

函式名: fseek

功  能: 重定位流上的檔案指標

用  法: int fseek(file *stream, long offset, int fromwhere);

引數: 操作的流,偏移量,移動到**

函式名: ftell

功  能: 返回當前檔案指標相對於檔案開頭的位移量

用  法: long ftell(file *stream);

獲取檔案大小:

void main() {

char* path = "e:\\files\\liuyan.png";

file *fp = fopen(path, "rb");

fseek(fp,0,seek_end);

long size = ftell(fp);

printf("%d", size);

fclose(fp);

getchar();

JNI入門之C C 基礎二

指標有型別,位址沒有型別 位址只是開始的位置,型別讀取到什麼位置結束 不同的型別讀取的位元組數不同 空指標的預設值為0 1 什麼是空指標 如果 p 是乙個指標變數,則 p 0 p 0l p 0 p 3 3 p 0 17 p null 中的任何一種賦值操作之後 對於 c 來說還可以是 p void 0...

c c 前五章基礎入門知識

一.c語言資料型別 1.常量 在程式中不能改變其值的量 分為整形常量 實型常量 字元型常量 字串常量四種。實型常量分為單精度 float 與雙精度 double 兩種。整形常量有長整形 long 短整型 short 整型 int 整型與實型可以強制轉換 括號內加int double,或者表示式前 1...

C C 學習筆記 基礎入門系列(五)

第一部分 helloworld的起點 第二部分 初探資料型別 一 第三部分 初探資料型別 二 第四部分 認識運算子 一 第五部分 認識運算子 二 第六部分 理清思路,寫好邏輯結構 一 第七部分 理清思路,寫好邏輯結構 二 第八部分 理清思路,寫好邏輯結構 三 第九部分 資料處理神器之陣列 一 第十部...