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 反正是你這個操作符過載的函式的基本格式就不對。函式的返回值型別在哪?引數列表在哪?這個應該是產生了二義性...