c語言文字區域性修改

2021-10-03 09:20:00 字數 1315 閱讀 7319

兩種方法修改區域性資料

//已在記憶體中修改過單行資料後直接呼叫該函式

void

rebuildfile

(list a)

//list為結構體指標,指標a指向已修改部分鍊錶

fclose

(p1)

;fclose

(p2)

;remove

("...\\date.txt");

//刪除date.txt檔案

rename

("...\\date2.txt"

,"...\\date.txt");

//將date2.txt重新命名為date.txt

}

但資料量很大時,單行改動就要重寫整個檔案,浪費很多計算資源。

流程:得到待修改的資料在檔案中的位置

將檔案內部指標定位到該位置

寫入新資料到檔案

file* p =

fopen

("...\\date.txt"

,"r+");

long position;

//後面用到

char name1[10]

;printf

("輸入需要修改的姓名:"

);scanf

("%s"

,name1)

;while

(fscanf

(p,"%d%s%lf"

,&num1, name1,

&source)==3

)

用於讀取的檔案指標無法用於寫入

long ftell( file *stream );函式讀取指標位置(相對檔案首偏移位元組數)

//接上

position =

ftell

(p);

position -

=//待修改資料長度; 即定位到待修改資料前

int origin

說明seek_set(0)

從檔案的開始處開始

seek_cur(1)

從當前位置開始

seek_end(2)

從檔案的結束處開始

fessk從orign處開始,向後偏移offset個位元組數,offset < 0 即向前移動

fseek

(p,position,1)

;//從當前位置開始

直接用fprintf寫入即可,會覆蓋原檔案,需考慮新資料長度小於原資料長度時,用空格覆蓋。

C語言 全域性?靜態全域性?區域性?靜態區域性

全域性變數 儲存在靜態區,程式執行的整個過程一直占用記憶體。所有檔案所有函式都可以使用 使用extern宣告 比較靈活。正是因為多個地方都可讀可寫,是乙個很危險的事,因為不知道某個時刻誰會將它改變,而且導致程式不方便移植。適當使用全域性變數還是有很多好處的,只是不推薦濫用全域性變數 區域性變數 除了...

C語言 函式內區域性陣列

直接看這個例子 void test 對於上面的test函式,如果連續呼叫兩次,會得到什麼樣的輸出 答案是 abcabc abc這是我實際測出的值,我當時很迷惑,為什麼b是區域性陣列,當函式結束時這部分記憶體就被釋放了,而第二次呼叫test時,b陣列的值仍然是abc.可能有人說區域性陣列是存放在靜態儲...

C語言 返回區域性變數

一般的來說,函式是可以返回區域性變數的。區域性變數的作用域只在函式內部,在函式返回後,區域性變數的記憶體已經釋放了。因此,如果函式返回的是區域性變數的值,不涉及位址,程式不會出錯。但是如果返回的是區域性變數的位址 指標 的話,程式執行後會出錯。因為函式只是把指標複製後返回了,但是指標指向的內容已經被...