我可以传递给 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);
filename
和 mode
都只是指向 char
(aka C 字符串)的空终止数组的指针。
restrict
关键字的存在似乎表明字符串不应重叠,这没有多大意义,因为它们都是 const
合格的。
当您将 char
数组传递给 fopen
时,将传递指向其第一个元素的指针。此步骤称为数组衰减为指针。每当在表达式中使用数组时都会发生同样的情况,但作为 sizeof
.
的参数除外
我可以将字符数组传递给 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);
filename
和 mode
都只是指向 char
(aka C 字符串)的空终止数组的指针。
restrict
关键字的存在似乎表明字符串不应重叠,这没有多大意义,因为它们都是 const
合格的。
当您将 char
数组传递给 fopen
时,将传递指向其第一个元素的指针。此步骤称为数组衰减为指针。每当在表达式中使用数组时都会发生同样的情况,但作为 sizeof
.