我可以传递给 fopen 什么?

What can I pass to fopen?

我可以将字符数组传递给 fopen 吗?例如:

    fopen(s, "r");

其中 s 被声明为字符数组并且以 null 结尾。

fopen() 的签名是:

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

因此 filename 参数必须是有效的 C 字符串。就这些了。

s 必须是指向空终止字符数组的指针。

man pages证实了这一点

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

您可以看到它必须以 null 结尾,因为没有给出 size 参数。

C11 标准中指定的 fopen 的确切签名是:

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

filenamemode 都只是指向 charaka C 字符串)的空终止数组的指针。

restrict 关键字的存在似乎表明字符串不应重叠,这没有多大意义,因为它们都是 const 合格的。

当您将 char 数组传递给 fopen 时,将传递指向其第一个元素的指针。此步骤称为数组衰减为指针。每当在表达式中使用数组时都会发生同样的情况,但作为 sizeof.

的参数除外