2016-08-17 130 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的参数。

相关问题