Могу ли я передать массив символов в fopen
? Например:Что я могу передать fopen?
fopen(s, "r");
Где s
объявлен как массив символов и нулем.
Могу ли я передать массив символов в fopen
? Например:Что я могу передать fopen?
fopen(s, "r");
Где s
объявлен как массив символов и нулем.
s
должен быть указателем на нулевой конец символьного массива.
man pages подтверждают это
FILE *fopen(const char *path, const char *mode);
Вы можете видеть, что он должен быть нулем, так как ни size
аргумент не задан.
Точная подпись для fopen
, как указано в п C11 стандарта является:
FILE *fopen(const char * restrict filename, const char * restrict mode);
Оба filename
и mode
являются лишь указателями на оканчивающийся нуль массивов из char
(аки C строк).
Наличие ключевого слова restrict
, по-видимому, указывает на то, что строки не должны пересекаться, что не имеет большого смысла, поскольку они оба являются const
квалифицированными.
Когда вы передаете массив char
в fopen
, передается указатель на его первый элемент. Этот этап называется , массив распадается на указатель. То же самое происходит, когда массив используется в выражении, за исключением аргумента sizeof
.
'' 'может быть любым, что вы хотите, если оно представляет последовательность символов с символом NUL. – Sergio
Когда вы передаете переменную функции, вы должны учитывать две вещи - тип переменной и значение переменной. Массив символов хорош для типа. Этого не достаточно. Его значение должно быть установлено соответствующим образом. –
Прочтите руководство ... google ... что угодно. Это не сложно. – StoryTeller