2016-08-17 129 views
-8

我可以將字符數組傳遞給fopen嗎?例如:我可以通過什麼來打開?

fopen(s, "r"); 

其中s被聲明爲字符數組,並以null結尾。

+1

's'可能是任何你想要的,如果它代表NUL終止的'char'序列。 – Sergio

+0

當你將一個變量傳遞給一個函數時,你必須牢記兩件事 - 變量的類型和變量的值。字符數組對於類型很有用。那還不夠。其價值必須適當設定。 –

+0

閱讀手冊...谷歌...任何東西。研究並不困難。 – StoryTeller

回答

2

s必須是一個指向空終止字符數組的指針。 enter image description here

man pages確認

FILE *fopen(const char *path, const char *mode); 

你可以看到,它必須被空終止,因爲沒有size給出參數。

1

的簽名fopen()是:

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

所以filename參數必須是一個有效的C字符串。就這樣。

+1

嚴格地說,它需要一個指針,而不是一個C字符串,它是一個'char'數組。 – Olaf

0

的Ni的C11標準中規定爲fopen確切簽名是:

FILE *fopen(const char * restrict filename, const char * restrict mode); 

兩個filenamemode僅會指向空的char又名C字符串)終止陣列。

restrict關鍵字的出現似乎表明字符串不應該重疊,這沒有多大意義,因爲它們都是合格的const

當您將char數組傳遞給fopen時,將傳遞指向其第一個元素的指針。該步驟被稱爲該陣列衰減爲指針。每當在表達式中使用數組時,都會發生同樣的情況,除了作爲sizeof的參數。

相關問題