c 引數型別問題FILE fopen const char filename,const char mode

2022-03-29 01:37:37 字數 4108 閱讀 8600

1樓:懷妙之

這裡的const關鍵字只是用來限定filename和mode這兩個引數在函式裡是不能被改變的,如果試圖改變,編譯器就會報錯.所以你傳入的只要是字串指標就行了.

至於"abcdefg"編譯會把它轉化成字元指標型別,指向首個字元'a'.

比如char * a="abcdefg";是正確語句

2樓:匿名使用者

這裡有兩個作用

1. const限定一個變數不允許被改變。

2. 使用const在一定程度上可以提高程式的安全性和可靠性,

另外,在**別人**的時候,清晰理解const所起的作用,對理解對方的程式也有一些幫助。

file *fopen( const char *filename, const char *mode );

這裡的const 含義也是一樣的。

一是 const char *保護實參指標指向的資料不被意外改寫。

二則一目瞭然的讓你知道引數的型別,方便閱讀。

const char *filenam;

從右往左看。

1.首先*filenam是個指標。

2.接著往左看char *filenam 是個char型別的指標。

3.繼續往左看const char *filenam這個char型別的指標指向一個const 常量。

合起來就是 這是一個指向常量的char型別指標。

傳入兩個char型別的指標就可以了。

3樓:

*)cs_filehname1,"r");

file *fp; char *filename="*****"; fp=fopen(filename, "rb++"); 開啟的是什麼?

4樓:

file *fopen(const char *filename, const char *mode);

fopen函式說明:將檔案 filename以mode方式開啟,並返回指向這個檔案的一個流.

其中開啟方式可以為以下的值:

r 只讀方式開啟

w 建立一個檔案用於寫入,如果檔案已經存在,這個檔案會被覆寫

a 開啟一個檔案並新增,如果檔案存在,開啟的時候是指向檔案的最後,如果不存在則建立

r+ 開啟一個已經存在的檔案來更新(讀寫),不存在則建立

w+ 建立一個檔案來更新(讀寫),如果檔案已經存在,則會被覆寫

a+ 開啟一個檔案來更新,如果檔案存在,開啟的時候是指向檔案的最後,如果不存在則建立

另外還可以指定是以二進位制方式(b)開啟還是以文字方式(t)開啟

所以fp=fopen(filename, "rb++"); 應該是以二進位制方式開啟filename來更新

另外,與fopen一起用的還有:

指定當前位置:

int fseek(file *stream, long offset, int whence);

void rewind(file *stream);//指到開始位置

讀:size_t fread(void *ptr, size_t size, size_t n, file *stream);

寫:size_t fwrite(const void *ptr, size_t size, size_t n, file *stream);

格式化:int fprintf(file *stream, const char *format[, argument, ...]);

........

c語言 這句編譯錯誤是什麼意思? 第167行長這樣「 if((fp=fopen(*filename,"r"))==null)」

5樓:匿名使用者

fopen第一個引數傳入的是一個字串。(const char * )

而你傳入的是一個*filename ,也就是一個字串取值,也就是一個字元。

所以報錯說,

expected 『const char * __restrict__』 期望是一個const char *型別的引數

but argument is of type 『char』 但你傳入的是一個字元(char)型別的引數。

所以filename前不要有*號

6樓:金色潛鳥

去掉星號:

if((fp=fopen(filename,"r"))==null)char filename[80]; 或 char *filename;

呼叫 fopen 時 用 fp=fopen(filename,"r") ...

7樓:匿名使用者

filename出問題了,

關於vs2013(2012)裡面fopen的問題

8樓:

fopen 要的引數是 const char *你的m_filename 是 cstring 啊.

cstring path_temp = m_filename + ".xls";

fout=fopen( path_temp.getbuttfer() , "a+" );

path_temp.releasebuffer();//用完記得 釋放

9樓:

工程屬性-常規-字符集 改成使用多位元組字符集。

或者這個地方改成

string m_filename;

createdirectory("e:\\lixuefang\\calibration\\results\\"+m_filename,null);

m_filename+=".xls" ;

fout=fopen(filename.c_str(),"a+");

c語言中用fopen 模式為w建立的檔案,儲存到**去了?

10樓:匿名使用者

《在文件中找到vc2010(你的編譯軟體文件 ) >

fopen建立的檔案應該就在project->「own_work」fopen所在的 project ->"own_work"同上檔名的檔案 ->"studentmanage.txt"找到文字文件

11樓:匿名使用者

儲存在你現在的目錄下,如果你建立的是二進位制檔案是打不開的,你可以指定你建立檔案的型別

例如fopen("myfile.txt","w");這樣建立的檔案就可以用記事本開啟,你也可以指定你要建立檔案的路徑,例如fopen("c:\new\myfile.txt","w")

12樓:風若遠去何人留

fopen的宣告形式為:

file *fopen(char *filename, char *mode);

當mode設定為"w"時,會對一個名字為filename的檔案執行寫操作,如果檔案存在,那麼檔案會被清空重寫,否則將會建立檔案。

檔案儲存的位置,由filename決定。

1 filename為絕對路徑,那麼將在filename指定的路徑下建立檔案,如

filename = "d:\\test\\a.txt"

則會在d盤test資料夾下,建立a.txt檔案。

2 filename中不包含路徑資訊,或包含相對路徑資訊,那麼檔案位置將由工作路徑,和filename共同決定。

如執行exe檔案的工作路徑為d:\clang\bin\

而filename為"a.txt",那麼就會生成d:\clang\bin\a.txt

如果filename為"..\\file\\a.txt",那麼就會生成d:

\clang\bin\..\file\a.txt。

也就是d:\clang\file\a.txt。

13樓:輕輕喚醒耳朵

一般在你建立的vs專案裡面。列如:d:\vistual 專案\project3\project3

我優不優秀 ~~~嘻嘻

14樓:小知知快長大

fopen開啟的不都是文字檔案麼?至於儲存。。。你當時開啟的時候給它的路徑是什麼他就儲存再那個路徑下面啊。。。你找一下你程式執行時生成執行檔的目錄,應該在那裡面

C語言實引數組與形引數組問題,關於c語言中陣列作為函式引數的函式之間呼叫問題

這個問題是這樣的了,因為你的陣列定義的是二維大小是20 20 地址空間已經分配好了,而但你輸入的m和n的值小於20的時候,你只是先給第一維賦值,如果輸入的數字大於20,在對第二維賦值,但你輸入一些小的m和n時,其實二維陣列你還沒有賦值,他們的值還是你預設給的0啊,而當你用二維陣列去讀數的時候 a 0...

revit例項引數和型別引數的區別

型別引數是管著這個型別所有族的引數,例項引數是隻針對於你選定的圖元的引數。比如說你見了一個門族,門的型別有很多種,比如說不同尺寸,但是所有尺寸的門的材質都是一樣的,那麼材質這個引數就是型別引數,每個門的尺寸就是其例項引數 1.型別引數 如果有同一個族的多個相同的型別唄載入到專案中,型別引數的值一旦被...

關於C 中類與內建型別型別轉換的問題

operator double const這句是啥意思?你是想過載 double 操作符?double是一個操作符嗎?能被過載?你是不是這個意思 double operator double a 反正是你這個操作符過載的函式的基本格式就不對。函式的返回值型別在哪?引數列表在哪?這個應該是產生了二義性...