2017-09-05 110 views
-2

我以爲我可以一個字符串指針傳遞給一個函數作爲這樣的:C:爲什麼我不能傳遞字符串作爲函數參數?

int main() 
{ 
    const char fileName[] = "network/fileName.yo"; 
    WriteFile(fileName); 
} 

int WriteNetwork(char* fileName) 
{ 
    printf("the filename is %s\n", fileName); 
} 

,但這似乎並沒有如我期望它的工作。我必須錯過一些非常簡單的事情,但似乎無法追蹤它!

+6

'WriteFile'或'WriteNetwork'? –

+2

它是如何工作的?你期望它如何工作?發生了什麼?這些都是有用的東西,包括。 –

+2

更改'WriteFile'聲明以獲取一個'const char *' –

回答

6

指向字符串文字的指針未傳遞到WriteFile()fileName[]用字符串文字"network/fileName.yo"初始化。它是通過的變量fileName。因爲它是一個數組,它被轉換爲指向其第一個元素的指針。

在使用它之前聲明或定義WriteNetwork()

將指向const數據的指針傳遞給期望指向非const數據的函數應該無法編譯。將WriteNetwork()更改爲接受const指針。 @Lưu Vĩnh Phúc

還要注意後,似乎把WriteFile()WriteNetwork()@Ray Toal。當然這是一個文書錯誤,函數名稱和調用應該是相同的。

// int WriteNetwork(const char* fileName) { 
int WriteFile(const char* fileName) { 
    printf("the filename is %s\n", fileName); 
} 

int main(void) { 
    const char fileName[] = "network/fileName.yo"; 
    WriteFile(fileName); 
} 

我一定是失去了一些東西很簡單,但似乎無法追查!

小費: 節省時間。啓用所有編譯器警告。他們提供快速反饋以幫助您「追蹤」。

+1

太棒了!如果你要介紹前向宣言,這個答案可能還會更好,但是因爲有不止一種方式來剝皮貓,所以1 /回答問題,2 /是準確的,所以......我的心可以做愛表情符號! – Sebivor

相關問題