2017-09-05 114 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

相关问题